#1
| ||||
| ||||
MySQL, Einträge nach Tagen/Monaten gruppierenAlso, ich habe ein kleines Wetterscript welches alle ~ 15 Minuten die aktuelle Temperatur meiner Heimatstadt in eine Datenbank einliest. Nun möchte ich aber gerne ein Diagramm erstellen welches die Temperaturen im Jahresverlauf ausgibt und da stosse ich auf ein Problem: Für jeden Tag habe ich rund (!) 96 Datensätze, alle tragen nen timestamp (via time() und sind also auf die Sekunde genau zu bestimmen allerdings finde ich keinen Ansatz wie ich den Tagesdurchschnitt berechnen kann also wie ich alle Eintrage des Tags X gruppieren kann damit ich die entsprechenden Werte für ein Diagramm habe. Eigentlich müsste die Abfrage folgendes leisten: Tag 1: alle Tageswerte addiert = X X / Anzahl der Tageswerte von Tag 1 = Tagesdurchschnitt von Tag 1 Tag 2: alle Tageswerte addiert = X X / Anzahl der Tageswerte von Tag 2 = Tagesdurchschnitt von Tag 2 Datenbankstruktur schaut wie folgt aus: id -> auto_increment zeit -> int(11) temperatur -> int(10) So sollte das Diagramm später mal aussehen: Code: ^ | | | 2 | _ 3 | 1 | | _ | _ | | | | _|_|_|_|_|_|_|___> | |
#2
| ||||
| ||||
Hol dir alle Datensätze aus der Datenbank und finde mit getdate() oder date() das Datum von jedem Datensatz heraus. Dann musst du alle Datensätze eines Tages in ein Array (ein Objekt wäre evtl. noch klüger) tun und kannst die Daten auswerten. Ausgewertete Daten von bereits vergangenen Tagen würde ich der Performance wegen in einer anderen MySQL Tabelle abspeichern. Ob du nun alte Temperaturwerte löschst, bleibt dir überlassen. Die Statistik ginge dadurch ja nicht verloren. Ich hab dir mal den eine komplette Klassenlib dazu geschrieben. Mit DayTempAnalyser::getAverages() bekommst du alle Tage, sowohl vergangene als auch den aktuellen, in einem Array. Die Datenbankfunktionen musst du natürlich ggf. durch eine andere Datenbankschnittstelle (DBKlasse oder so) ersetzen. DayTempAnalyser ist eine Schnittstelle zu deiner Statistik, Day repräsentiert einen noch nicht vollendeten oder noch nicht vollständig ausgewerteten Tag (mit einer vorläufigen Tagesdurchschnittstemperatur), DayAverage hingegen einen schon vergangenen Tag mit einem abgeschlossenen bzw. endgültigen Durchschnitt. PHP-Code: Die Datenbank für die Lib müsste folgendermaßen aussehen: temperatures - timestamp INT - temperature FLOAT dayaverages - date VARCHAR(10) - im Format d-m-Y (kannst natürlich auch einen anderen Datentyp nehmen, du musst nur den Code entsprechend anpassen - VARCHAR war für mich jetzt am leichtesten, weil ich mit dem DATE Datentyp nur wenig Erfahrung habe) - average FLOAT Du kannst natürlich noch weitere Felder hinzufügen, wie du lustig bist. Und achja - ich hab die Lib nicht getestet, also es könnten noch Bugs drin sein. codethief. |
#3
| ||||
| ||||
Theorie: Die Funktion FROM_UNIXTIME(unix_timestamp,format) in Kombination mit groupby sollten dies ermöglichen. |
Stichworte |
- |
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Und-Suche mit MySQL | exe | Programmierung und Datenbanken | 2 | 02.06.2005 13:43 |
Lohnt sich ein Umstieg von mySQL 3.x auf 4.1? | Gérome | Webspace, Webserver, Domains | 2 | 07.05.2005 12:43 |
Einträge von Heute aus einer MySQL DB auslesen. | Daniel Richter | Programmierung und Datenbanken | 10 | 08.11.2004 18:57 |
PHP & MySQL: Lizenzkonflikte wurden gelöst | Michael Przybyla | Boardunity-Talk | 5 | 06.04.2004 21:57 |
forenentwicklung und die neuen mysql lizenzen | Björn | Entwicklung und Konzeption sozialer Software | 4 | 12.11.2003 18:33 |