MSQL, soll nach Jahren zusammenzälen, klappt nur Tage weise
Sascha
- datenbank
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)
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
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
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
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!