Anfängerfrage: Diagramm erstellen aus Daten der letzten 7 Tage

  • Hallo,
    ich habe ein Problem mit einem Diagramm, welches veranschaulichen soll wie lange ein User ein Programm benutzt hat, dazu speichert das Programm für jede einzelne Stunde in einer MySQL Datenbank die Zeit, welche anschließend in PHP über ein Diagramm veranschaulicht werden soll. Mein Problem dabei ist folgendes:
    Da ein User das Programm ja nicht unbedingt 24 Stunden an 7 Tagen in der Woche verwendet gibt es in der Datenbank natürlich auch Stunden, welche garnicht darin stehen, also kann ich nun nicht sagen, dass er einfach die letzten 168 EInträge ausliest (168 = 27*7) um von jedem Tag die einzelnen Zeiten von 0 bis 23 Uhr anzuzeigen. Nun ist die Frage für mich, wie ich nun festlegen kann, dass er immer von 0 bis 23 Uhr ausliest und dann leere Zeiten mit 0 ausgibt und auch die Einzelnen Daten der letzten 7 Tage vom heutigen an nach hinten hin den einzelnen Zeiten pro Stunde zuordnet.
    Ich wollte das ganze mit diesem Diagramm veranschaulichen: http://jpgraph.net/features/src/s…et=new_bar1.php
    Mein Ansatz bisher war folgender:


    Wie man erkennen kann finktioniert das so nun nicht wirklich so, wie ich es mir erhofft habe. Wäre schön, wenn mir geholfen werden könnte!

    Gruss
    Hannibal

  • Hängt etwas davon ab, wie du die Zeiten gespeichert hast. Wenn du sie als Timestamp hast, kannst du sie ungefähr so auslesen:

    Code
    [COLOR=#00008B][FONT=Consolas]SELECT[/FONT][/COLOR][COLOR=#000000][FONT=Consolas]*[/FONT][/COLOR][COLOR=#00008B][FONT=Consolas]FROM[/FONT][/COLOR][COLOR=#000000][FONT=Consolas] `[/FONT][/COLOR][COLOR=#00008B][FONT=Consolas]table` [/FONT][/COLOR][COLOR=#00008B][FONT=Consolas]WHERE `username`='$name' AND[/FONT][/COLOR][COLOR=#000000][FONT=Consolas] `timestamp_spalte` [/FONT][/COLOR][COLOR=#000000][FONT=Consolas]>[/FONT][/COLOR][COLOR=#000000][FONT=Consolas] DATE_SUB[/FONT][/COLOR][COLOR=#000000][FONT=Consolas]([/FONT][/COLOR][COLOR=#00008B][FONT=Consolas]CURRENT_TIMESTAMP[/FONT][/COLOR][COLOR=#000000][FONT=Consolas],[/FONT][/COLOR][FONT=Consolas][COLOR=#000000] INTERVAL [/COLOR][COLOR=#800000]1 WEEK[/COLOR][/FONT][COLOR=#000000][FONT=Consolas])[/FONT][/COLOR]

    Du vergleichst dabei einfach den gespeicherten Timestamp mit dem aktuellen Timestamp minus 7 Tage. Es gibt in MySQL noch verschiedenste andere Datums- und Zeitfunktionen, eine gute Referenz davon gibt es hier. BETWEEN könnte z.B. auch eine Funtkion sein, die dir dabei nützlich ist.

    Die genaue Unterteilung der Daten machst du dann am besten programmatisch in PHP.

    EDIT: Hier wäre noch die deutsche Version der Referenz: http://dev.mysql.com/doc/refman/5.1…-functions.html

    2 Mal editiert, zuletzt von lukasn (11. November 2012 um 16:53) aus folgendem Grund: sql code korrigiert.

  • Die Zeiten sind um Unix Timestamp gespeichert, und jede angefangene Stunde wird eben ein neuer EIntrag gemacht mit dem Aktuellen Datum also Tag Monat Jahr und Stunde gemacht.