Sascha: MSQL, soll nach Jahren zusammenzälen, klappt nur Tage weise

Ich habe eine Tabelle in meiner MYSQL Datenbank, die hat eien Spalte Datum, in der steht ein timestap:

2010-11-04 08:54:17
2010-11-03 15:46:43
2010-11-03 15:04:01
2009-01-03 14:16:10
2009-01-03 13:07:25
2009-01-03 09:48:31
2008-10-03 14:16:10
2008-10-03 13:07:25
2008-10-03 09:48:31

Nun würde ich gerne alle Zeilen zählen und nach Jahren sortieren,

aber so wie ich es mache sortiert er es mir nach dem ganzen Datum und nicht nach Jahren! Kann mir jemand sagen wa sich da wiede rmal falsch mache?

SELECT DATE_FORMAT( date, '%Y' ) AS datum, count( * ) AS zugriffe  
FROM count  
GROUP BY date( date )  
ORDER BY date DESC

Sascha (der Ratlose)

  1. Ich habe eine Tabelle in meiner MYSQL Datenbank, die hat eien Spalte Datum, in der steht ein timestap:

    Nein, das ist kein timestamp - aber es ist gut so, weil ein timestamp eh nicht so toll wäre...

    Nun würde ich gerne alle Zeilen zählen und nach Jahren sortieren,

    »»
    Das widerspricht deiner Überschrift und deinem Code - dort willst du nämlich auch gruppieren.

    aber so wie ich es mache sortiert er es mir nach dem ganzen Datum und nicht nach Jahren! Kann mir jemand sagen wa sich da wiede rmal falsch mache?

    SELECT DATE_FORMAT( date, '%Y' ) AS datum, count( * ) AS zugriffe

    FROM count
    GROUP BY date( date )
    ORDER BY date DESC

    
    >   
    
    MySQL macht genau das, wonach du fragst. Es gruppiert nach "date" und da steht nunmal das ganze Datum und nicht nur das Jahr. Aber du hast doch schon ein "datum" mit DATE\_FORMAT erstellt. Nutze das doch mal in GROUP BY...  
      
    Gruß  
    Alex
    
    1. O Gott...

        
      SELECT count( * ) AS zugriffe, DATE_FORMAT( date, '%Y' ) AS datum  
      FROM count  
      GROUP BY year( date )  
      ORDER BY date DESC  
        
      
      

      es lag ja vor mir ;-)

      Danke

  2. Hallo Sascha,

    aber so wie ich es mache sortiert er es mir nach dem ganzen Datum und nicht nach Jahren! Kann mir jemand sagen wa sich da wiede rmal falsch mache?

    SELECT DATE_FORMAT( date, '%Y' ) AS datum, count( * ) AS zugriffe

    FROM count
    GROUP BY date( date )
    ORDER BY date DESC

      
    Du möchtest also offensichtlich nach der Spalte gruppieren, die Du "datum" genannt hast. Die [Verwendung von Aliasnamen in der GROUP-BY-Klausel](http://dev.mysql.com/doc/refman/5.1/en/problems-with-alias.html) ist erlaubt. Warum machst Du das nicht?  
      
      
    Freundliche Grüße  
      
    Vinzenz
    
  3. Hi!

    [code lang=php]SELECT DATE_FORMAT( date, '%Y' ) AS datum, count( * ) AS zugriffe

    Wenn du das Jahr haben möchtest, solltest du die dafür spezialisierte Funktion YEAR() verwenden, dann weiß MySQL sofort, was du haben willst und muss nicht erst den Formatstring auswerten.

    GROUP BY date( date )

    Und über das YEAR(date) kannst du auch gruppieren

    ORDER BY date DESC

    Da MySQL bei einer Gruppierung gleichzeitig sortiert, reicht es, die Sortierrichtung der GROUP-BY-Klausel mitzugeben.

    Lo!