2011-01-06 10 views
9

Hier ist mein Problem. Ich brauche mehr als eine Zeile aus der Datenbank, und ich brauche die erste Zeile für bestimmte Aufgabe und dann gehen Sie durch alle Liste erneut, um einen Datensatz zu erstellen.Die erste Zeile der mysql-Ressourcenzeichenfolge abrufen?

$query = "SELECT * FROM mytable"; 
$result = mysql_query($query); 

$firstrow = //extract first row from database 
//add display some field from it 


while($row = mysql_fetch_assoc($result)) { 
    //display all of them 
} 

Nun, wie extrahiert man nur die erste Zeile?

+0

Was in einer Tabelle die erste Zeile? – Toto

+0

@ M42: Er will die erste Zeile im Recordset, klar. –

Antwort

13

Mit mysql_fetch_assoc() wird nicht nur eine Zeile abgerufen, sondern auch der interne Zeiger der Ergebnismenge in die nächste Zeile verschoben. Um die Ergebnisressource auf die erste Zeile zurückzusetzen, müssen Sie mysql_data_seek() verwenden.

$query = "SELECT * FROM mytable"; 
$result = mysql_query($query); 

$firstrow = mysql_fetch_assoc($result); 

// reset the result resource 
mysql_data_seek($result, 0); 


while($row = mysql_fetch_assoc($result)) { 
    //display all of them 
} 
+0

Wie ineffizient. Warum in aller Welt möchten Sie eine Suchoperation ausführen und die erste Zeile erneut abrufen, wenn Sie sie bereits extrahiert haben? –

+0

Sie müssen @mrNepal fragen, warum er es tun möchte. Es kann einen sehr guten Grund geben. Auf der anderen Seite, wenn es keinen besonderen Grund gibt, stimme ich zu, dass es nicht der optimale Ansatz ist. Ich habe die Frage einfach so beantwortet, wie sie gestellt wurde. –

+0

Ich kann nicht verstehen, warum der Downvote. Dies ist die perfekte Antwort auf mein Problem. Ich Grund, ich brauche die erste Zeile und dann wieder mit den Ergebnissen laufen, ist, weil ich das gleiche Ergebnis für 1 verwende) Zeigen Sie den vollen Inhalt und 2) Um andere verwandte Inhalte zu zeigen. – mrN

0

Jedes Mal, wenn Sie mysql_fetch_assoc($result) anrufen, erhalten Sie eine Zeile. Also, anstatt sie wiederholt in einer Schleife zu tun, tun Sie es nur einmal:

$result = mysql_query("..."); 
if ($row = mysql_fetch_assoc($result)) { 
    $firstRow = $row; 

    while ($row = mysql_fetch_assoc($result)) { 
     // all the rest 
    } 
} 

Haftungsausschluss: Diese schönere Code sein könnte, aber Sie bekommen die Idee!

+0

nein, es hat nicht funktioniert .... während auch nur eine Zeile holt – mrN

+0

In der Tat vergaß Tomalak, den internen Zeiger zurückzusetzen. – Andrew

+0

@Andrew: Eh? Welcher interne Zeiger. Ich verstehe nicht, warum dieses Snippet nicht funktionieren sollte. –

1

Wenn Sie wieder alle Zeilen von der ersten erhalten dann die

$query = "SELECT * FROM mytable"; 
$result = mysql_query($query); 

if ($row = mysql_fetch_assoc ($result){ 
    $firstRow = $row; 
    mysql_data_seek($result, 0); 

    while($row = mysql_fetch_assoc($result)) { 
     //display all of them 
    } 
} 

Mehr über mysql_data_seek hier folgende versuchen: PHP: mysql_data_seek - Manual

+0

+1, danke für die Hilfe – mrN

+0

Gleicher Kommentar wie zu David. –

+0

Gleicher Kommentar wie frühere Antwort. – mrN

Verwandte Themen