Eleganter Weg Daten eines Jahres auszulesen?

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

  • Eleganter Weg Daten eines Jahres auszulesen?

    Ich moechte die Anzahl der Produkte aus der Datenbank holen die in den letzten 12 Monaten eingetragen wurden, sprich heute waeren das die Daten von

    Januar 2004
    Dezember 2003
    [...]
    Januar 2003

    Das Format liegt als Unixtimestamp vor, so dass es kein Problem ist mit einem Query der Form

    PHP-Code:
    mysql_query("SELECT count(produkte) FROM tabelle WHERE MONTH(FROM_UNIXTIME("datum"))=1 AND YEAR(FROM_UNIXTIME("datum"))=2004" 
    die anzahl der Produkte für Januar 2004 herauszufischen.

    Die Frage ist jetzt ob man mit einem einzigen SQL-Query sich die letzten 12 Monate auflisten kann ohne in PHP eine Schleife laufen zu lassen die sich dann auch noch mit Jahresüberschneidungen abmuehen muss. Wenn nicht, hat jemand eine Idee die Schleife zu programmieren?

    Im Moment stell ich mich da glaub ich doof an, weil ich in der schleife überpruefe ob der zu überpruefende Monat 1 (=januar) ist und ich im naechsten step das jahr dann um 1 verkleinern muss. Das sieht nicht nur unschoen aus, ich denke es geht einfach besser irgendwie.

    Rocco
    Zuletzt geändert von Rocco; 22.01.2004, 14:51.

  • #2
    Code:
    SELECT
        COUNT(produkte)
    FROM
        tabelle
    WHERE
        FROM_UNIXTIME(datum) > DATE_SUB(NOW(), FROM_UNIXTIME(datum) INTERVAL 12 MONTH)
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      PHP-Code:
       DATE_SUB(NOW(), FROM_UNIXTIME(datumINTERVAL 12 MONTH
      Also das ist glaube ich nicht moeglich. Zmdst gibts einen SQL-Error und ich glaube auch dass man date_sub nur 2 Werte übergeben kann (anfangswert und interval).

      Was aber damit funktioniert ist eine Schleife der Marke:

      PHP-Code:
      $i=1;
      for (
      $i=1;$i<=12;$i++){
      queryblabla DATE_SUB(NOW(), INTERVAL $i MONTH) )
      $anzahlfürdenmonat=fetcharray Ergebnis;

      Wobei das auch nicht ganz korrekt ist, denn ich brauche nur die daten für den ganzen Monat, und nicht der letzten 30 Tage. INTERVAL 1 MONTH bedeutet 22.Januar bis 22.Dezember bei diesem Query wenn ich mich nicht täusche.



      Rocco
      Zuletzt geändert von Rocco; 22.01.2004, 15:08.

      Kommentar


      • #4
        Original geschrieben von Rocco
        Also das ist glaube ich nicht moeglich. Zmdst gibts einen SQL-Error und ich glaube auch dass man date_sub nur 2 Werte übergeben kann (anfangswert und interval).
        stimmt. war ein fehler.... aber es waren auch nur 2 parameter...

        so aber jetz ....
        Code:
        SELECT
            COUNT(produkte)
        FROM
            tabelle
        WHERE
            FROM_UNIXTIME(datum) > DATE_SUB(NOW(),  INTERVAL 12 MONTH)

        und dein käse mit den schleifen lass mal schön sein.
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          Original geschrieben von Rocco
          Wobei das auch nicht ganz korrekt ist, denn ich brauche nur die daten für den ganzen Monat, und nicht der letzten 30 Tage.
          dann musst du den start vorher mit php errechnen und die query so aufbauen.

          Code:
          SELECT
              COUNT(produkte)
          FROM
              tabelle
          WHERE
              FROM_UNIXTIME(datum) BETWEEN '2003-12-01 00:00:00' AND NOW()
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar

          Lädt...
          X