PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tagesstatistiken erstellen



stefaan
24-12-2006, 21:51
Liebe Leute!

Nachdem die Bescherung vorbei ist, möchte ich noch meine Überlegungen zu einem Problem loswerden, das mich zur Zeit beschäftigt.

Ich habe für eine Intranetapplikation eine Logtabelle, die das Datum (MySQL-Timestamp), eine UserID und den Status (Login, Logout) speichert. Nun möchte ich die Tabelle graphisch auswerten, z.B mit einem Balkendiagramm für jeden Tag im Monat. Es ist ja kein Problem, das ganze mit COUNT() und GROUP BY mit einem Query für das ganze Monat zu machen.
Nur kann es vorkommen, dass an einem Sonn- oder Feiertag kein Login stattfindet und dann dieser Tag bei dem Query einfach fehlen würde.

Mir fallen dazu drei Lösungen ein. Wie würdet ihr das lösen?

a) Es gibt in MySQL eine Datumsfunktion, die alle Tage eines Monats ausspuckt und mit einem Join auf die Logtabelle bekomme ich für leere Tage den Wert 0. Diese Datumsfuktion hat MySQL scheinbar aber nicht bzw. ich wüsste nicht, wie man das über eine SQL-Query lösen könnte.
Wahrscheinlich aber die sauberste Lösung.

b) Die Query mit den Löchern mit PHP nachbearbeiten und das Array mit den fehlenden Tagen befüllen.
Ein Query, einen Loop in PHP und ein paar Array-Funktionen

c) Rekursiv. Mit mkdate das jeweilige Tagesdatum in einem Monatsloop ausgeben lassen und für jeden Tag ein SQL-Query loslassen.
Einfach zu programmieren, aber wohl nicht so sauber.

Wie macht ihr das? Hab ich noch wo eine Lösung übersehen?

Danke und frohe Festtage...

Grüße, Stefan

Romanday
25-12-2006, 15:46
Wie macht ihr das? Hab ich noch wo eine Lösung übersehen?

Grüße, Stefan

Geht auch einfacher..

Feiertage sind Länderabhängig (Bundesländer, Staaten).
Bei deinem Login fragst Du zuerst z. B. mit PHP, Perl ab ob es sich
um einen Sonntag handelt, und danach deine Tabelle o. Datei mit den
den ganzen Feiertagen. Die kannst du ja nach Ländern speichern,
sortieren usw.

So kannst du ganz bequem deine Feiertage bearbeiten, erweitern und
mußt nicht mit irgendwelchen Löchern arbeiten.

stefaan
27-12-2006, 13:36
Servus!

Danke für die Anregung, nur so kann ich es auch nicht machen.
Es _kann_ Tage geben, wo sich keiner einloggt (wenig Betrieb, Chef nicht da, etc). Es kann auch unter der Woche vorkommen, dass sich an einem Tag einmal keiner einloggt...
Daher können Lücken an beliebigen Tagen entstehen...

Grüße, Stefan

marce
29-12-2006, 19:38
ich würde Lösung (c) nehmen - ist vermutlich nicht die eleganteste, vermutlich aber die flexibelste... ausserdem dürfte der entstandene Code für jeden verständlich sein - und damit einfacher zu pflegen...

Turbohummel
30-12-2006, 09:26
Falls die Möglichkeit besteht:
Jede Nacht um 8:00 per Cron die Werte aufrechnen lassen und in eine extra Tabelle schreiben. Inbesondere natürlich bei großen Datenmengen sinnvoll.
Dann hast du jeden Tag ein Datensatz.

stefaan
30-12-2006, 13:56
Servus!

Danke für die Anregungen...
Da sich die Anmeldungen im zweistelligen Bereich halten werden, ist der Cronjob wohl etwas zu überdimensioniert. Ich werde wohl bei Lösung (c) bleiben, die ich mir in einer anderen Sache für eine quick-n-dirty-Lösung schon zusammengebastelt habe...

Grüße, Stefan