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.
Über den Autor
Software 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
MySQL: Neue Spalte zu einer Tabelle hinzufügen
Tutorial | 0 Kommentare
MySQL: Zeilenumbrüche in MySQL
Tipp | 0 Kommentare
MySQL: Aktuelles Datum oder Zeit in Spalte schreiben
Tutorial | 0 Kommentare
MySQL: Suchergebnisse auf mehreren Seiten darstellen
Tutorial | 0 Kommentare
Mehrere Texte gleichzeitig ersetzen
Tutorial | 0 Kommentare
jQuery: Nach unten und nach oben scrollen mit und ohne JavaScript
Tipp | 0 Kommentare
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.