Statistiken über Anmeldungen

T

TiMbO2k

Hi,

ich habe auf meiner Homepage ein Usersystem, wo sich User Accounts anlegen können, etc.. Bei der Anmeldung wird immer der TIMESTAMP der Anmeldezeit mit gespeichert. Nun bin ich gerade dabei eine Statistik zu erstellen, wo ausgegeben wird wann wieviele Accounts angelegt wurden. Momentan werden die Anzahl der angelegten Account am aktuellem Tag, Woche und Monat angezeigt. Nun habe ich für den jeweils aktuellen Monat ein Diagramm erstellt, wo alle angelegten Useraccount pro Tag dargestellt werden. Dabei habe ich aktuell aber für jeden Tag eine einzelne Query. Gibt es eine Möglichkeit die Queries irgendwie zusammenzufassen?

So sieht die Query für die Monatsübersicht aus:

Code:
for($i=1; $i<=$days; $i++)
    {
    $data = $db->query_first("select
                              count(*) as count
                              from usertabelle
                              where
                              DAYOFMONTH(FROM_UNIXTIME(anmeldezeit,'%Y-%m-%d')) = '".$i."' AND
                              MONTH(FROM_UNIXTIME(anmeldezeit,'%Y-%m-%d')) = MONTH(CURDATE()) AND
                              YEAR(FROM_UNIXTIME(anmeldezeit,'%Y-%m-%d')) = YEAR(CURDATE())");
    }

Vielleicht kann ich die Query ja irgendwie optimieren. Ich bin über jeden Ratschlag dankbar. Vielleicht gibt es ja auch eine Möglichkeit die Query zum ermitteln der Account pro Woche, Monat und aktuellem Tag zusammenzufassen, denn auch hier habe ich für jede Option eine extra Query.

MfG

TiMbO2k
 
Zuletzt bearbeitet von einem Moderator:
Ich habs jetzt hinbekommen

Hi,

ich habe eben mal ein wenig rumprobiert und nun bin ich schon soweit, das ich nur eine Query für den ganzen Monat habe.

PHP:
$query = $db->query("select
                     count(*) as count,
                     DAYOFMONTH(FROM_UNIXTIME(anmeldezeit,'%Y-%m-%d')) as day
                     from usertabelle
                     where
                     MONTH(FROM_UNIXTIME(anmeldezeit,'%Y-%m-%d')) = MONTH(CURDATE()) AND
                     (FROM_UNIXTIME(anmeldezeit,'%Y-%m-%d')) = YEAR(CURDATE())
                     group by
                     DAYOFMONTH(FROM_UNIXTIME(anmeldezeit,'%Y-%m-%d'))");

while($data = $db->fetch_array($query)) { $monat[$data['day'] = $data['count']; }

Nun kann man auf jeden Tag zugreifen. Also zum Beispiel

PHP:
echo $monat[1];

Um alle Tage auszugeben, sollta man eine For Schleife machen in der alle Tage des Monats durchlaufen werden und dann immer das Array $monat[$i] die jew. Anmeldungen an dem Tag zurückgibt. Vielleicht gibt es ja noch eine bessere Optimierungsmöglichkeit. Der einzige Nachteil ist, das es bei der MySQL Version 2.22.xx leider nicht so funktioniert.

MfG

TiMbO2k
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück