1319 Stimmen

MySQL: Timestamp Spalte nach Monat und Jahr gruppieren

Tipp von Stefan Trost | Letztes Update am 07.01.2023 | Erstellt am 22.05.2012

In Blogs oder Foren sehen wir oft an einer Seite der Webseite eine Liste mit Links, die anzeigen, in welchem Monat und in welchem Jahr wie viele Beiträge geschrieben wurden. Wenn man auf einen dieser Links klickt bekommt man die entsprechenden Artikel und Beiträge aus genau diesem Monat angezeigt.

Wie aber bestimmt man die Anzahl von Beiträgen je Monat? Schließlich haben wir die Beiträge in unserer MySQL-Tabelle zeitlich mit der Hilfer einer TIMESTAMP- oder DATE-Spalte eingeordnet und ein "GROUP BY date_spalte" würde uns nicht die Anzahl der Artikel pro Monat oder Jahr ausgeben sondern die Anzahl der Artikel je Tag beziehungsweise je einem spezifischem Datum oder sogar je einer spezifischen Zeit - und ein Ergebnis dieser Art wollen wir natürlich nicht.

Der Schlüssel liegt in dem Benutzen der MySQL-Funktionen YEAR() und MONTH(), die uns das Jahr beziehungsweise den Monat einer TIMESTAMP-, DATETIME oder DATE-Spalte zurückgeben können. Unser GROUP BY könnte  also so aussehen:

GROUP BY YEAR(dat), MONTH(dat)

Damit gruppieren wir nach dem Jahr und nach dem Monat der Spalte "dat".

Anzahl der Einträge aus einer Tabelle pro Monat bestimmen

Schauen wir uns dazu einen konkreten Anwendungsfall an. Ein Beispiel für eine komplette SELECT-Anfrage haben wir hier:

SELECT COUNT(id), RPAD('0', 2, MONTH(dat)), YEAR(dat) FROM tabelle 
GROUP BY YEAR(dat), MONTH(dat);

Mit diesem SELECT zählen wir die ID (oder wahlweise natürlich auch jede andere eindeutige Zuordnung der Datensätze) und lesen auch gleich Monat und Jahr der gezählten Beiträge aus. Das RPAD sorgt dafür, dass wir unseren Monat gleich in zwei Zeichen mit führenden Nullern auslesen können und nicht erst anschließend formatieren müssen.

Ein mögliches Ergebnis dieser Abfrage wäre das folgende:

ANZAHL   MONAT   JAHR
12       01      2022
37       02      2022
83       03      2022
78       04      2022
95       05      2022

Mit PHP lässt sich dieses Ergebnis dann einfach wie gewünscht formatieren, so dass wir eine Darstellung wie zum Beispiel "01/2022 (12)" oder wie wir es ansonsten haben möchte bekommen und das ganze mit der Suchfunktion nach den Artikeln verlinken können.

Anzahl der Einträge aus einer Tabelle pro Jahr bestimmen

Natürlich können wir unsere Abfrage auch so gestalten, dass wir statt den Einträgen pro Monat die Einträge pro Jahr ausgeben. Wir müssen dafür nur den Teil mit dem Monat weglassen:

SELECT COUNT(id), YEAR(dat) FROM tabelle 
GROUP BY YEAR(dat);

Ein mögliches Ergebnis könnte dann so aussehen:

ANZAHL   JAHR
67       2021
39       2022
73       2023

Dies bietet sich zum Beispiel für den Fall an, dass wir eine Webseite mit nur sehr wenigen Artikeln haben und eine Monatsauflösung daher zu klein wäre.

AntwortenPositivNegativ

Über den Autor

AvatarSoftware von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen

 

Ähnliche Themen

jQuery: CSS Stylesheet Switcher

Tutorial | 1 Kommentar

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.