MySQL-Abfrageergebnis divergiert
Lennart
- php
Hallo Forum,
ich habe ein kleines Problem mit einer MySQL-Abfrage, die ich in PHP tätige. Es handelt sich um eine Datenbank mit diversen Tabellen. In einer Tabelle stehen Werte, die einen Zeitstempel haben und einen Temperaturwert sowie weitere - für die Frage aber unwichtige Werte. Ich möchte nun anhand einer Abfrage diese Werte einfach ausgeben, allerdings sortiert und zwar aufsteigend.
Zunächst prüfe ich diese Abfrage mit dem MySQL-Querybrowser auf das gewünschte Ergebnis. Meine Abfrage sieht wie folgt aus:
select value,datum FROM tbvalues
where id='1' AND project_id='1' AND object_id='1' AND gebaeude_id='2' AND datalogger_id='1'
and since=STR_TO_DATE('2006-September-14-18-17-44','%Y-%M-%d-%H-%i-%s')
and datum > '2006-10-04 00:00:00' and datum < '2006-10-05 23:59:59' order by datum asc;
Der Querybrowser gibt mir das gewünschte Ergebnis heraus. Die Werte werden sortiert nach dem Datum dargestellt.
04.10.2006 01:20 24,58
04.10.2006 01:25 24,59
04.10.2006 01:30 24,56
04.10.2006 01:35 24,54
04.10.2006 01:40 24,53
Nun füge ich exakt obige Abfrage in mein PHP-Skript ein. Ich nehme die beiden Rückgabewerte und schreibe sie in ein Mehrdimensionales Array, welches ich später auslese und anzeige.
$abfragekette = "select value,datum FROM tbvalues where id='$pruefstelle' AND project_id='$projekt' AND object_id='$objekt' AND gebaeude_id='$gebaeude' AND datalogger_id='$datalogger' AND since=STR_TO_DATE('$since','%Y-%M-%d-%H-%i-%s') and datum > '$vjahr-$vmonat-$vtag 00:00:00' and datum < '$jahr-$monat-$tag 23:59:59' order by datum asc";
mysql_connect($db_hostname,$benutzer,$kennwort);
mysql_select_db($db_optionen);
$abfrage = mysql_query($abfragekette);
while ($summe = mysql_fetch_array($abfrage)){;
$tmp = $summe["value"];
$test[$tmp] = $summe["datum"];
}
mysql_close();
foreach ($test as $k=>$r){
echo "$r: $k<br />";
}
Nun habe ich folgendes Problem. Das Ergebnis ist bis auf einen einzigen Wert exakt gleich. Ich erhalte allerdings einen Fehlwert:
04.10.2006 01:20 24,58
04.10.2006 01:25 24,59
05.10.2006 04:20 24,56
04.10.2006 01:35 24,54
04.10.2006 01:40 24,53
Ich habe die letze Stunde versucht irgendwo den Fehler zu finden, hab das Skript neu geschrieben, die Abfrage kopiert, neu eingefügt und und und. Leider erschließt sich mir der Fehler nicht.
Folgend noch ein paar wichtige Infos:
MySQL-Version 4.1.13
PHP-Version 4.4.0
Vielleicht kann mir einer von euch ja einen Hinweis geben.
hi,
while ($summe = mysql_fetch_array($abfrage)){;
$tmp = $summe["value"];
$test[$tmp] = $summe["datum"];
}
Du benutzt also den Summenwert als Array-Key.
Was, wenn jetzt noch mal ein Datensatz mit dem gleichen Summenwert kommt? Richtig, dein vorheriger Array-Eintrag wird durch den Wert aus dem aktuellen Datensatz überschrieben. Und da du die Einträge nach Datum aufsteigend sortiert ausliest, hast du damit nachher an dieser Stelle ein "höheres" Datum stehen.
gruß,
wahsaga
Du benutzt also den Summenwert als Array-Key.
Was, wenn jetzt noch mal ein Datensatz mit dem gleichen Summenwert kommt? Richtig, dein vorheriger Array-Eintrag wird durch den Wert aus dem aktuellen Datensatz überschrieben. Und da du die Einträge nach Datum aufsteigend sortiert ausliest, hast du damit nachher an dieser Stelle ein "höheres" Datum stehen.
Sehr richtig. Das Komplizierte liegt im Simplen. Danke :)