MySQL Abfrage | Primary Key != 1, trotzdem erste Row abfragen

S

sevY

Hi zusammen,

ich möchte einen Datensatz aus einer Mysql DB mit PHP ziehen.

Die Abfrage ist:

PHP:
$read=mysql_query("select * from $db_contact where ID='$_POST[pkx]'",$handler);

$ID ist der Primary Key des Table und wir mit der Variablen $pkx, die extern aus einer Navigation an dieses Script übergeben wird, definiert.

Um beim Aufrufen der Seite direkt den ersten Datensatz bereitzustellen wir onload $pkx='1'; gesetzt und übergeben. Das ist soweit auch korrekt. Nun das Problem. Man kann die Datenbank via Admintool administrieren.

Wenn nun der Datensatz mit dem Primary Key 1 gelöscht wird, ist $pkx='1'; trivial, da der Primary Key mit auto_increment gezählt wird. Gibt es nun eine Möglichkeit, anstatt numerisch, faktisch ein Statement zu übergeben, das sagt, das der Datensatz mit dem ersten Primary Key geladen werden soll? Also quasi der kleinste Wert des Primary Key?

Beispiel:


PHP:
$read=mysql_query("select * from $db_contact where ID='//ersten Datensatz aus der Datenbank'",$handler);

Danke und viele Grüße,
Yves
 
PHP:
select MIN(ID) from $db_contact;

gibt dir den kleinsten Wert der Spalte ID. Den kannst du dann in der WHERE Klausel benutzen.

Gruß

Tobias
 
Hi,

danke für deine Antwort :)


Geht doch auch so, oder? Das wäre nämlich am einfachsten, da die Sache aus Flash übergeben/abgefragt wird.


PHP:
$read=mysql_query("select * from $db_contact ORDER BY ID asc LIMIT 0,1",$handler);


Liebe Grüße

Yves
 
Wieso LIMIT 0, 1? LIMIT 1 gibt dir nur den einen Datensatz aus. (In deinem Fall den mit der kleinsten ID.)

Gruß

Tobias
 
Hi,

das ist auch so gewollt.

Es ist für Flash. Die Flashdatei lädt beim Aufruf des Movies den ersten Datensatz in eine Komponente, in die später durch instanzierte Navigationsbuttonkomponente, die die restlichen PK mitbekommen und mit sendAndload(); das loadVars()-Objekt definieren, die entsprechenden Inhalte geladen werden. Es wäre also unnötig, alle Datensätze bereitzustellen wenn ich nur den ersten brauche. Hatte ich aber in diesem Kontext nicht erwähnt, sorry ;)

Auf jedenfall ist mein Problem nun gelöst.

Dankeschön :)

Yves
 
Nene. Das hab ich schon verstanden. Ich hab mich nur gefragt, warum du LIMIT 0,1 (das 0, ist doch überflüssig, oder?) statt LIMIT 1 schreibst, wenn du nur einen Datensatz haben willst.

Gruß
Tobias
 
Hi,

die 0 ist nicht überflüssig.

„LIMIT 0,1: 0 ist die Position, 1 die Anzahl Datensätze“


LIMIT 3,5 würde bedeutet, das ab der 3. Row nun 5 Rows (4. Row bis 8. Row) ausgeben werden.

Hier die 0 zu notieren ist einfach sauberer, müsste auch ohne funktionieren.

Yves
 
Zurück
Oben Unten