User Aktivität / pro Monat - PHP

  • Hey Leute.

    Schon wieder komme ich mit einem Problem.

    Ich sitze derzeit an einem kleinen Userpanel. Dieses soll unter anderem zeigen, wie oft sich der User pro Monat angemeldet hat. Dabei soll nur eine Anmeldung pro Tag zählen. Also kann man max. 30 bzw. 31 "Aktivitätspunkte" pro Monat "sammeln".

    Mein Fehler bzw. Problem besteht darin, dass er zwar immer die Monate ausgibt, aber das Jahr nicht berücksichtigt. Bzw es soll so aussehen:

    00 00 00 00 00
    03/11 04/11 05/11 06/11 07/11

    In einer Art Legende der Monat bzw. das Jahr.. oben drüber die "Punkte" wie oft man im Monat angemeldet war.

    Ich habe das Ganze so gelöst:

    Die Legende habe ich jetzt erstmal außen vor gelassen. Vllt könnte mir jmd. von euch Verbesserungsvorschläge geben, wie ich die Monate und das Jahr miteinbeziehen kann, bzw. dann auch die Legende bestücken kann.

    Danke XantypiaxD

  • Ich werde weder aus deiner Beschreibung noch aus dem Quellcode schlau, ist irgendwie chaotisch

  • Wir kennen deine datenbankstruktur nicht, und wissen nicht, wie du das abspeicherst. Ich würde das so machen:

    Code
    tabelle activity
    [FONT=Courier New]user_id | timestamp
    --------+-----------
    1       | 12953600
    [/FONT]


    Undzwar ist der timestamp der des aktuellen tages um 0:00:00 Uhr. (Wie du auf den kommst, solltest du selbst rausfinden können).
    Beim login wird nun eben dieser timestamp generiert und in der tabelle nachgesehen, ob der User sich an diesem Tag bereits eingeloggt hat. Je nachdem erstellst du einen neuen datensatz oder eben nicht.

    Beim anzeigen geht es darum, den Timestamp von 1. des Monats um 0:00:00 Uhr und des 30. / 31. des Monats um 23:59:59 Uhr herauszufinden und ber COUNT alle datensätze zu zählen, die im zwischenraum liegen.

    Ist sicher nicht die optimal lösung.
    EDIT:
    Es ist sogar eine ziemlich schlechte, denn auf dauer wird die Tabelle riesig und nach n paar järchen kanns sein, dass der login dann deswegen ziemlich langsam wird. Die grenze von 256 TB bei MyISAM wirst du aber eher nicht erreichen, dein Server auch nicht.

    Optional kannst du es auch per cronjobs lösen:
    Du hast eine Tablle daily_activity, deren Einträge jeden tag um 0:00:01 in ene tabelle monthly_activity übernommen werden und danach gellert wird.
    Die monthly_activity leerst du ebenso jeden Monat am letzten tag um 23:59:59 und fügst die gesammelten punke der user einer generellen Tabelle hinzu.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

    Einmal editiert, zuletzt von Tobse (25. Mai 2011 um 18:10)