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:
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:
Als Ergebnis erhalte ich die Durchschnittswerte von den Terminen:
->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:
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
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";
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