Hallo Gemeinde
Ich kämpfe gerade mit einem Projekt, welches zwar nicht direkt mit ips zu tun hat, aber evtl. dennoch in diesem Forum thematisch richtig ist…daher gleich mal vorab meine Entschuldigung, falls ich hier im falschen Forum sein sollte…
Ich versuche mal die Sache als Laie zu erklären:
Ich habe SQL Datenbank in einem Datenlogger zur Verfügung, auf die ich mit HeidiSQL draufkomm…in dieser gibt es eine Tabelle „measurement“ mit den Spalten „ID“, „SensorID“, „Value“, „AnswerDate“ und „RequestDate“.
In dieser Tabelle werden alle 5 Minuten die Werte der jeweiligen Zähler abgelegt, wobei „SensorID“ eben aussagt, welcher Zähler es ist…Value ist der Wert des jeweiligen Zählers und AnswerDate und RequestDate ist die Zeit des jeweiligen Zählerstandes…siehe Bilder measurement1 + measurement2 im Anhang
In einer weiteren Tabelle „sensor“ erfolgt die Zuweisung der „SensorID“ zu dem jeweils angeschlossenen Gerät.
Wo ich hin möchte:
Will eine Darstellung haben über die Anzahl an Zählungen innerhalb eines Zeitbereiches von einer Stunde, also etwa so wie in dem Bild „Wunschvorstellung“ …im idealfall dann unten noch einen „Vor“ und „Zurück“ Button, mit dem ich die Tage wechseln kann…
Meine Vorgehensweise als Laie:
Ich habe mir erstmal was gebastelt, um die aktuelle Zeit + Datum zu ermitteln…dann bastel ich mir eine „time2“, die das aktuelle Datum und als Uhrzeit die zurückliegende volle Stunde hat…also heute um 12:24 Uhr wäre time2 dann heute um 12:00…
Dann versuche ich zu ermitteln, wie der Zählerstand einer bestimmten SensorID um 12:00 war und wie er aktuell ist…das mache ich mit „time2+3600“, was ja dann 13:00 Uhr heute wäre…da es aber noch nicht 13 Uhr ist sondern erst 12:24, suche ich nach allen Werten die vor 13 Uhr abgelegt wurden, sortiere diese und suche mir den, der die „höchste“ Zeit hat…wäre dann in meinem Beispiel der von 12:20 Uhr, weil ja alle 5 Minuten geloggt wird…
Dann bilde ich die Differenz aus den beiden Werten und habe damit die Anzahl an Takten zwischen 12:00 Uhr und 12:20 Uhr…
$sql =
"SELECT
(SELECT Round(VALUE,0) FROM measurement WHERE (AnswerDate<=$time2+3600) And SensorID=86 Order By AnswerDate DESC Limit 0,1) - (SELECT Round(VALUE,0) FROM measurement WHERE (AnswerDate=$time2) And SensorID=86) AS Differenz86,
(SELECT Round(VALUE,0) FROM measurement WHERE (AnswerDate<=$time2+3600) And SensorID=7 ORDER BY AnswerDate DESC Limit 0,1) - (SELECT Round(VALUE,0) FROM measurement WHERE (AnswerDate=$time2) And SensorID=7) AS Differenz7,
(SELECT Round(VALUE,0) FROM measurement WHERE (AnswerDate<=$time2+3600) And SensorID=8 ORDER BY AnswerDate DESC Limit 0,1) - (SELECT Round(VALUE,0) FROM measurement WHERE (AnswerDate=$time2) And SensorID=8) AS Differenz8,
(SELECT Round(VALUE,0) FROM measurement WHERE (AnswerDate<=$time2+3600) And SensorID=9 ORDER BY AnswerDate DESC Limit 0,1) - (SELECT Round(VALUE,0) FROM measurement WHERE (AnswerDate=$time2) And SensorID=9) AS Differenz9,
(SELECT Round(VALUE,0) FROM measurement WHERE (AnswerDate<=$time2+3600) And SensorID=10 ORDER BY AnswerDate DESC Limit 0,1) - (SELECT Round(VALUE,0) FROM measurement WHERE (AnswerDate=$time2) And SensorID=10) AS Differenz10,
(SELECT Round(VALUE,0) FROM measurement WHERE (AnswerDate<=$time2+3600) And SensorID=11 ORDER BY AnswerDate DESC Limit 0,1) - (SELECT Round(VALUE,0) FROM measurement WHERE (AnswerDate=$time2) And SensorID=11) AS Differenz11,
(SELECT Round(VALUE,0) FROM measurement WHERE (AnswerDate<=$time2+3600) And SensorID=12 ORDER BY AnswerDate DESC Limit 0,1) - (SELECT Round(VALUE,0) FROM measurement WHERE (AnswerDate=$time2) And SensorID=12) AS Differenz12,
(SELECT Round(VALUE,0) FROM measurement WHERE (AnswerDate<=$time2+3600) And SensorID=82 ORDER BY AnswerDate DESC Limit 0,1) - (SELECT Round(VALUE,0) FROM measurement WHERE (AnswerDate=$time2) And SensorID=82) AS Differenz82,
(SELECT Round(VALUE,0) FROM measurement WHERE (AnswerDate<=$time2+3600) And SensorID=83 ORDER BY AnswerDate DESC Limit 0,1) - (SELECT Round(VALUE,0) FROM measurement WHERE (AnswerDate=$time2) And SensorID=83) AS Differenz83,
(SELECT Round(VALUE,0) FROM measurement WHERE (AnswerDate<=$time2+3600) And SensorID=84 ORDER BY AnswerDate DESC Limit 0,1) - (SELECT Round(VALUE,0) FROM measurement WHERE (AnswerDate=$time2) And SensorID=84) AS Differenz84,
(SELECT Round(VALUE,0) FROM measurement WHERE (AnswerDate<=$time2+3600) And SensorID=85 ORDER BY AnswerDate DESC Limit 0,1) - (SELECT Round(VALUE,0) FROM measurement WHERE (AnswerDate=$time2) And SensorID=85) AS Differenz85,
(SELECT Round(VALUE,0) FROM measurement WHERE (AnswerDate<=$time2+3600) And SensorID=86 ORDER BY AnswerDate DESC Limit 0,1) - (SELECT Round(VALUE,0) FROM measurement WHERE (AnswerDate=$time2) And SensorID=86) AS Differenz86,
(SELECT Round(VALUE,0) FROM measurement WHERE (AnswerDate<=$time2+3600) And SensorID=87 ORDER BY AnswerDate DESC Limit 0,1) - (SELECT Round(VALUE,0) FROM measurement WHERE (AnswerDate=$time2) And SensorID=87) AS Differenz87";
$db_erg = mysqli_query( $conn, $sql );
if ( ! $db_erg )
{
die('Ungültige Abfrage: ' . mysqli_error());
}
echo '<table border="1">';
while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC))
{
echo "<thead>";
echo "<tr>";
echo "<th class=>Zeit von bis</th>";
echo "<th class=>SGM 1</th>";
echo "<th class=>SGM 2</th>";
echo "<th class=>SGM 5</th>";
echo "<th class=>SGM 6</th>";
echo "<th class=>SGM 7</th>";
echo "<th class=>SGM 8</th>";
echo "<th class=>SGM 9</th>";
echo "<th class=>SGM 10</th>";
echo "<th class=>SGM 11</th>";
echo "<th class=>SGM 12</th>";
echo "<th class=>SGM 13</th>";
echo "<th class=>SGM 14</th>";
echo "<tr>";
echo "<td>". $Stund;
echo " bis ";
echo $Stund1;"</td>";
echo "<td align=center>". $zeile['Differenz85'] . "</td>";
echo "<td align=center>". $zeile['Differenz84'] . "</td>";
echo "<td align=center>". $zeile['Differenz83'] . "</td>";
echo "<td align=center>". $zeile['Differenz82'] . "</td>";
echo "<td align=center>". $zeile['Differenz7'] . "</td>";
echo "<td align=center>". $zeile['Differenz8'] . "</td>";
echo "<td align=center>". $zeile['Differenz9'] . "</td>";
echo "<td align=center>". $zeile['Differenz10'] . "</td>";
echo "<td align=center>". $zeile['Differenz11'] . "</td>";
echo "<td align=center>". $zeile['Differenz12'] . "</td>";
echo "<td align=center>". $zeile['Differenz86'] . "</td>";
echo "<td align=center>". $zeile['Differenz87'] . "</td>";
echo "</tr>";
Soweit meine Laienhafte Logik…
Ich hoffe, ich konnte das halbwegs verständlich ausdrücken und bitte um Nachsicht, falls mein Ansatz zu kompliziert oder gar völlig falsch ist
Bin leider absolut befreit von Vorkenntnissen und hab mal versucht, mit viel gegoogel mir die Sache zusammenzureimen…
Ich habe mit obigem code nun die Daten aus der zurückliegenden vollen Stunde, möchte ich die Daten aus der Stunde davor, würde ich jetzt $time2-3600 und $time2-7200 verwenden…für die Stunde davor dann $time2-7200 und $time2-10800…das Ganze insgesamt 24 mal wenn ich nen ganzen Tag wie in dem Beispiel darstellen möchte…
Ich denke, das das zwar mit viel Geschreibe irgendwie funktionieren könnte, aber sicherlich mehr als unsauber und unschön ist…
Daher an dieser Stelle die Frage nach hilfreichen Tipps oder Suchbegriffen, die mir bei dem Projekt weiterhelfen…
Würde mich sehr über jede Hilfe freuen