PHP Kann definiertes Datenintervall nicht aus MySQL Datenbank korrekt beziehen.

Woodz

Lieutenant
Registriert
Apr. 2009
Beiträge
696
Hallo Leute.

Ich habe folgendes Problem:
Der Benutzer definiert über ein php-<form> ein Datum (YYYY-MM-DD) und einen Termin (HH:MM). Aus diesen Angaben erstelle ich einen String über:
Code:
$date = $Datum." ".$Termin.":00";
in der Form YYYY-MM-DD HH:MM:SS

D.h. ich erhalte z.B. einen String von: '2019-01-21 08:00:00'

Nun füge ich diesen String in folgende Query für MySQL ein, um die Durchschnittstemperatur für jede Stunde, der letzten 24h zu berechnen:
Code:
$statement = $pdo->prepare("SELECT Messwerte.Messzeit,
                                   AVG(Messwerte.Temperatur) avgTemp
                               FROM Kennziffern inner join Messwerte on (Kennziffern.Kennziffer = Messwerte.Kennziffer)
                              WHERE Messwerte.Termin >= DATE_ADD(?, INTERVAL -24 HOUR) AND
                                    Messwerte.Temperatur IS NOT NULL
                           GROUP BY Messwerte.Termin,
                                    Messwerte.Messzeit
                           ORDER BY Messwerte.Termin ASC;");

        $statement->execute(array($date));

        $results = null;
        $results = $statement->fetchAll(\PDO::FETCH_ASSOC);
        
        return array(array_column($results,'Messzeit'), array_column($results,'avgTemp'));


Als Ergebnis erhalte ich die Durchschnittswerte von den Terminen:
Code:
Array ( [0] => 08:00:00 [1] => 09:00:00 [2] => 10:00:00 [3] => 11:00:00 [4] => 12:00:00 [5] => 13:00:00 [6] => 14:00:00 [7] => 15:00:00 [8] => 16:00:00 [9] => 17:00:00 [10] => 18:00:00 [11] => 19:00:00 [12] => 20:00:00 [13] => 21:00:00 [14] => 22:00:00 [15] => 23:00:00 [16] => 00:00:00 [17] => 01:00:00 [18] => 02:00:00 [19] => 03:00:00 [20] => 04:00:00 [21] => 05:00:00 [22] => 06:00:00 [23] => 07:00:00 [24] => 08:00:00 )

->Also von 08:00 bis 08:00 Vortag

Und nun zum eigentlichen Problem:
Wenn der Benutzer nun den Termin nach hinten verschiebt (z.B. auf 06:00 Uhr), dann erhalte ich die Durchschnittstemperaturen von:
Code:
Array ( [0] => 06:00:00 [1] => 07:00:00 [2] => 08:00:00 [3] => 09:00:00 [4] => 10:00:00 [5] => 11:00:00 [6] => 12:00:00 [7] => 13:00:00 [8] => 14:00:00 [9] => 15:00:00 [10] => 16:00:00 [11] => 17:00:00 [12] => 18:00:00 [13] => 19:00:00 [14] => 20:00:00 [15] => 21:00:00 [16] => 22:00:00 [17] => 23:00:00 [18] => 00:00:00 [19] => 01:00:00 [20] => 02:00:00 [21] => 03:00:00 [22] => 04:00:00 [23] => 05:00:00 [24] => 06:00:00 [25] => 07:00:00 [26] => 08:00:00 )

Also von 08:00 bis Vortag 06:00! Es müsste aber laut SQL-Statement von 06:00 Heute bis 06:00 Vortag sein.
Das Ganze läuft beliebig weit. Gibt der Benutzer ein Datum von vor 14 Tagen ein, so erhalte ich die Durchschnittstemperaturen vom aktuellsten Termin rückwirkend bis vor 14 Tage also ca. 336 Werte. Es sollen aber immer vom gewähltem Termin die letten 24h berechnet und wiedergegeben werden.

Ich habe gestern den String manuell in die SQL Query eingefügt und über phpmyadmin die Abfrage getestet. Da schein es wunderbar zu funktionieren. Es scheint irgendwo beim Ersetzen des Platzhalters (?) mit dem übergebenen String zu klemmen (denke ich).

Beste Grüße
Woodz
 
Woodz schrieb:
Es müsste aber laut SQL-Statement von 06:00 Heute bis 06:00 Vortag sein.
Nein, laut SQL Statement alles nach Eingabe -24 Stunden. Wenn du nur ein 24 Stunden Zeitfenster willst, musst du irgendwo mit ner Obergrenze arbeiten.
 
Ohhh FCK! Ich wusste das es an so einer Banalität liegen würde! Wie blind muss man eigentlich sein?!
Ok, ich danke Euch! Ich habe es geändert und es funktioniert sofort. Boah, wie peinlich! Und jetzt nix wie weg hier ;)

Grüße
 
Zurück
Oben