2016-10-28 1 views
1
auf meine verschachtelten MySQLi-Datensatz zu arbeiten

Es scheint, wie diese nach vorne ziemlich gerade sein sollte, so dass ich das Gefühl, dass ich einfach etwas fehlt bin. Ich führe zwei getrennte Abfragen aus und sie werden einer assoziativen Array-Variablen zugewiesen. Die Abfragen laufen gut und die Daten sind da. Ich versuche, ein Dataset innerhalb des anderen Datasets mit While-Schleifen zu durchlaufen. Es läuft beim ersten Mal gut, aber ich kann das verschachtelte Dataset nicht zurücksetzen, damit ich es erneut durchlaufen kann. Im Code und den Ergebnissen unten sehen Sie, dass die Daten tatsächlich da sind, da sie von der bedingten IF-Anweisung übersprungen werden. Außerdem, wenn ich die verschachtelte Abfrage von aufsteigend in absteigend ändern bekomme ich den zweiten Satz von Daten und nicht die ersten (I nur in der ersten Abfrage zwei Datenpunkte haben, während ich die Erstellung und Prüfung).PHP: Ich kann() nicht erhalten zurückgesetzt

Es scheint, wie die Reset() Funktion sollte das tun, was ich suche, aber es hat nichts zu erreichen. Ich hoffe, ich vermisse gerade etwas wirklich Einfaches.

Ich habe sogar versucht, die $ ROWDATE Array auf eine leere Array Einstellung und beide NULL vor und nach der While-Schleife um es zu zwingen, die Daten erneut abzurufen, aber das tat nichts, als auch.

-Code-Schnipsel:

$studSet = mysqli_query($connection, $queryStud); 
    confirmQuery($studSet); 

    $dateSet = mysqli_query($connection, $queryDate); 
    confirmQuery($dateSet); 

    while ($rowStud = mysqli_fetch_assoc($studSet)) { 
     $studID = $rowStud['ID']; 
     $sFName = $rowStud['FName']; 
     $sLName = $rowStud['LName']; 
     $output .= "<p>" . $sFName . " " . $sLName; 
     while ($rowDate = mysqli_fetch_assoc($dateSet)) { 
      $output .= "<br />" . current($rowDate) . "&nbsp;&nbsp;&nbsp;"; //here strictly for debugging 
      if ($studID == $rowDate['studentID']) { 
       $output .= $rowDate['timeStamp']; 
      } 
     } 
     reset($rowDate); 
     $output .= "</p>"; 
     $output .= "current " . current($rowDate) . " element"; //here strictly for debugging 
    } 

    return $output; 

Ergebnis:

CodeResult

Vielen Dank im Voraus für Ihre Hilfe.

+1

'Reset ($ ROWDATE)' nicht zurückspulen die Abfrage nicht, so dass Sie 'mysqli_fetch_assoc ($ dateSet)' wieder aufrufen können. – Barmar

+0

Warum führen Sie zwei separate Abfragen aus? Es sieht so aus, als ob das, was Sie tun, dem Verbinden der zwei Abfragen entspricht. – Barmar

+0

Ich dachte dasselbe über die Möglichkeit, die Ergebnisse aus dem Dataset erneut abrufen zu können, aber es funktioniert nicht. Ich begann mit einer verknüpften Abfrage, aber ich fand, dass es tatsächlich einfacher ist, die Trennung und Formatierung in der Webseite zu implementieren, wenn ich die Abfragen separat ausführe und sie in einer verschachtelten Schleife durchlaufen würde. – ThePostyMan

Antwort

0

Ja, Sie fehlen zwei wichtige Punkte hier:

1) Sie versuchen reset() auf der Platte zu verwenden, die keinen Sinn macht, würde ich besser verstehen, wenn man versucht, $ zurücksetzen() dateSet, was das Abfrageergebnis ist.

2) $ dateSet ist keine regelmäßige Anordnung, sondern eine MySQLi Ressource, das bedeutet, dass Sie nicht regelmäßig PHP-Array-Funktionen auf sie verwenden können. Das gleiche Sie verwenden mysqli_fetch_assoc() eine Zeile zu extrahieren, verwenden Sie mysqli_data_seek() die gleiche Wirkung als Reset() zu erhalten, so würde der Code sein:

mysqli_data_seek($dateSet, 0); 

(die den Reset() Aufruf ersetzt) ​​

Verwandte Themen