MySQL Statistiken generieren
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
aktuellen monats
brennend interessieren
code
date
datum
einzelnen tag
ergebnis
erleuchtung
ermitteln
erwartet code
form
format
formatierung
gespann
kleine optimierung
tab
tabelle
tag
url
vorhaben
-
Moin,
ich stehe vor einem Problem und finde einfach keine Lösung dafür.
Es geht darum, dass ich tag/date">Daten aus einer MySQL-Tabelle in dieses Format bringen muss:
[['23-Jun-13', 121], ['24-Jun-13', 578], ['25-Jun-13', 871], ['26-Jun-13', 2], ['27-Jun-13', 52], ['28-Jun-13', 98], ['29-Jun-13', 144], ['30-Jun-13', 261]];
Nun habe ich eine Tabelle mit Daten. Jede Zeile enthält einen Unix-Timestamp.
Was ich nun versuche ist, für jeden einzelnen Tag der vergangegen 28 Tage zu ermitteln, wie viele Einträge erstellt wurden. Also nicht, wie viele Einträge in 28 Tagen erstellt wurden, sondern für jeden Tag einzeln.
Diese Information muss ich dann in dieses Format umwandeln
['tag-monat-jahr', anzahl]
Mir stehen für diese "Aufgabe" MySQL, PHP und JS zur Verfügung. Aber ich bekomme es partout nicht hin. Daher bin ich für jede Hilfe dankbar.
EDIT:
Oh... Die Erleuchtung kam früher, als erwartet :)
SELECT DATE_FORMAT(FROM_UNIXTIME(row), '%d-%b-%y') AS day, COUNT(*) AS total FROM table GROUP BY day
Bleibt eigentlich nur eine Frage: Wie limitiere ich das nun auf die letzten 28 Tage?
EDIT:
Okay, ich habe eine logisch gesehen bessere Lösung. Lediglich die Syntax könnte u.U. eine kleine Optimierung vertragen:
SELECT DATE_FORMAT(FROM_UNIXTIME(row), '%d-%b-%y') AS day, COUNT(*) AS total FROM table WHERE DATE_FORMAT(FROM_UNIXTIME(row), '%b-%y') = DATE_FORMAT(CURDATE() , '%b-%y') GROUP BY day
Beitrag zuletzt geändert: 30.6.2013 22:47:18 von fabo -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
versuch es mal so:
SELECT DATE_FORMAT(DATE_SUB(FROM_UNIXTIME(row), INTERVAL 28 DAY),'%d-%b-%y') AS `date`, ... FROM tabelle
Beitrag zuletzt geändert: 30.6.2013 22:56:24 von n0tiert -
Also ich bin eigentlich so weit, dass ich mein Vorhaben nun problemlos durchführen kann:
SELECT DATE_FORMAT(FROM_UNIXTIME(row), '%d-%b-%y') AS day, COUNT(*) AS total FROM table WHERE DATE_FORMAT(FROM_UNIXTIME(row), '%b-%y') = DATE_FORMAT(CURDATE() , '%b-%y') GROUP BY day
Dadurch erhalte ich zeilenweise eine Auflistung aller Ergebnisse aller Tage innerhalb des aktuellen Monats. Ich befürchte nur, dass das in der Form ein Overkill ist. -
fabo schrieb:
es würde mich brennend interessieren, was du daran als overkill findest? du meinst etwa nicht die umwandlung von data mit mysql? ich kann dich aus erfahrung beruhigen, mysql kann es bis zu 1000x schneller machen als das gespann apache-php!
... Ich befürchte nur, dass das in der Form ein Overkill ist.
das einzige 'tuning', was ich noch machen würde ist ;)SELECT DATE_FORMAT(FROM_UNIXTIME(row), '%d-%b-%y') day, COUNT(*) total FROM table WHERE DATE_FORMAT(FROM_UNIXTIME(row), '%b-%y') = DATE_FORMAT(CURDATE() , '%b-%y') GROUP BY day
no? was?? also nur 'AS' weg (weil unnötig) und die <tab>s dazwischen zu <space>s (nur wegen der formatierung). (small is beauty ;) -
Das mit den Tabs hat schon seinen Sinn :p Aber danke, das mit AS hatte ich vergessen :)
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage