Anzahl der Einträge für die letzten 30 Tage

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Anzahl der Einträge für die letzten 30 Tage

    Ich habe eine Tabelle die wie folgt aufgebaut ist:

    id | timestamp | wert

    Folgende Daten sind beispielsweise enthalten:

    5 | 1301413413 | 1
    4 | 1301413413 | 1
    3 | 1301232332 | 1
    2 | 1300232332 | 1
    1 | 1301322123 | 1

    Wie kann ich am sinnvollsten für die letzten 30 Tage eine Anfrage machen, die mir die Anzahl der Einträge pro Tag zurück gibt? Also in der Form:

    29.03.2011 | 3
    28.03.2011 | 7
    .
    .
    .

    Bis zu folgendem Statement weiss ich leider nicht mehr weiter:

    SELECT FROM_UNIXTIME(`timestamp`, '%d.%m.%Y') as datum , COUNT(*) FROM `tabelle` GROUP BY FROM_UNIXTIME(`timestamp`, '%d.%m.%Y') ORDER BY timestamp DESC LIMIT 0,30

    Ich bekomme zwar die Werte pro Tag, allerdings nicht für die letzten 30 Tage. Auch sollen Tage, an denen es keine Einträge gab, mit 0 angezeigt werden.

  • #2
    Mit strtotime den timestamp von vor 30 Tagen errechnen und dann WHERE timestamp größer als der errechnete Timestamp.

    Einträge (mit 0) hinzuzuerfinden dürfte schwierig werden. Aber im verarbeitenden Programm sollte es ja ein leichtes sein, die fehlenden Tage zu errechnen.

    Kommentar


    • #3
      Vielen Dank! Die Funktion strtotime ist natürlich Gold wert. Ich kannte Sie zwar, wusste aber ehrlich gesagt nicht, wie "mächtig" sie ist.

      Ich mache es jetzt so, dass ich in einer Schleife vom aktuellen Tag an, die letzten 30 Tage durchlaufen lassen und dann ein COUNT(*) auf den jeweiligen Tag mache in der Datenbank mache.

      Hatte gehofft, dass es auch rein mit SQL geht.

      Nachtrag:

      Wie folgt sieht der PHP-Code aus, falls es jemandem hilft :-)

      PHP-Code:
      $today strtotime(date('Y-m-d'));

      for(
      $today=$date=strtotime(date('Y-m-d'));$date>=strtotime('-30 days',$today);$date=strtotime('-1 days',$date)) 

      ... 
      Zuletzt geändert von jason2030; 30.03.2011, 08:53.

      Kommentar


      • #4
        Hallo,

        bitte benutz die Code-Tags, damit sieht der Code übersichtlicher aus und bei PHP-Code hat man gleich noch Syntax Highlighting.

        Zitat von jason2030 Beitrag anzeigen
        Hatte gehofft, dass es auch rein mit SQL geht.
        Das geht auch. Zwar bekommst du die fehlenden Tage dazwischen nicht mit 0, aber die kannst du ja nachträglich einfügen. Die anderen Tage kannst du aber mit einer einzigen Abfrage ermitteln:

        Code:
        select count(*)
        from tabelle
        where `timestamp` >= curdate() - interval 30 day
        group by date(`timestamp`)
        Gruß,

        Amica
        Zuletzt geändert von AmicaNoctis; 30.03.2011, 08:54.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Danke! Habe nun mit SQL noch etwas herumexperimentiert. Folgende "Funktionen" waren mir bisher unbekannt :-(

          Code:
          ... BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE() ...

          Kommentar


          • #6
            Zitat von jason2030 Beitrag anzeigen
            Folgende "Funktionen" waren mir bisher unbekannt
            Du kanntest also SQL zwar, wusstest aber ehrlich gesagt nicht, wie mächtig es ist?
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Zitat von AmicaNoctis Beitrag anzeigen
              Du kanntest also SQL zwar, wusstest aber ehrlich gesagt nicht, wie mächtig es ist?
              Bin halt schon ein älteres Semester PHP + MySQL ist relatives Neuland für mich. Lerne aber sehr gerne dazu. Beides ist ja hervorragend dokumentiert, jedoch fehlt manchmal so ein kleiner Schubs in die richtige Richtung.

              Kommentar


              • #8
                Ist vielleicht nicht relevant, aber CURDATE() dürfte einen etwaigen Query Cache aushebeln.

                Tendentiell das Datum vielleicht besser per PHP in die Query schreiben.

                - MySQL :: MySQL 5.1 Reference Manual :: 7.6.3.1 How the Query Cache Operates
                - PHP: date - Manual

                Kommentar

                Lädt...
                X