kostenloser Webspace werbefrei: lima-city


MySQL Statistiken generieren

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    fabo

    fabo hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. versuch es mal so:

    SELECT DATE_FORMAT(DATE_SUB(FROM_UNIXTIME(row), INTERVAL 28 DAY),'%d-%b-%y') 
    AS `date`, ... FROM tabelle


    :prost:

    Beitrag zuletzt geändert: 30.6.2013 22:56:24 von n0tiert
  4. Autor dieses Themas

    fabo

    fabo hat kostenlosen Webspace.

    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.
  5. fabo schrieb:
    ... Ich befürchte nur, dass das in der Form ein Overkill ist.
    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!

    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 ;)
  6. Autor dieses Themas

    fabo

    fabo hat kostenlosen Webspace.

    Das mit den Tabs hat schon seinen Sinn :p Aber danke, das mit AS hatte ich vergessen :)
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!