Sönke Tesch: Puffer in Schleife

Beitrag lesen

$row=mysql_fetch_array($res); // erste Seite holen
echo "<li>". $row["url"];     // und Adresse ausgeben
$last_timestamp=$row[changed];
»»
while($row=mysql_fetch_array($res))
{
  $Sekunden=$row[changed]-$last_timestamp;
  echo $Sekunden;
  echo "<li>". $row["url"];
  $last_timestamp=$row[changed];
};

Wenn ich das so mache, habe ich doch dieselbe URL stehen, wie im ersten Duchlauf durch die Schleife, oder? Der Unterschied ist nur, das in der ersten Zeile 0 Sekunden stehen wird, und in der 2. Zeile erst di richtige Zeit, oder?

Nein, schau Dir das nochmal genau an:

In dem Teil vor dem while werden die Daten für die erste Seite geholt, dann die Adresse der ersten Seite ausgegeben und dann die Zeit in $last_timestamp gespeichert (aber noch keine Zeit ausgegeben).

In (!) dem while() werden bereits die Daten der nächsten Seite geholt. Dann (jetzt erste Zeile in der Schleife) wird der Abstand zwischen $last_timestamp (der Zeit der ersten Seite) und der aktuellen (also jetzt zweiten) Seite berechnet und ausgegeben. Die Ausgabe erfolgt aber noch hinter der Adresse der ersten Seite. Das ist die Verweildauer auf der ersten Seite, vom Abruf der ersten Seite bis zum Abruf der zweiten.

Erst dann wird ein neuer Listenpunkt (<li>) und mit ihm die Adresse der zweiten Seite ausgegeben. Nach dem Sichern der Abrufzeit der zweiten Seite geht die Schleife dann wieder von vorne los: Jetzt werden die Daten der dritten Seite geholt, der Abstand zwischen (in $last_timestamp gesicherter) Zeit der zweiten und der aktuellen dritten Seite ausgegeben usw.

Was übrigens die Sache mit "MySQL-Zeit nicht zur Berechnung von Sekundenabständen geeignet" angeht: MySQL hat eine Funktion namens unix_timestamp() eingebaut. Schau mal in die Anleitung, Abteilung "Functions for use in select and group by clauses".

Gruß,
  soenk.e