SQL Abfrage der letzten Monate

selberbauer

Captain
Dabei seit
Juni 2009
Beiträge
3.604
Hi,

ich hänge gerade an einer Datums-Abfrage in SQL.

Ich möchte die Namen der letzten fünf Monate abfragen, dass heisst, dass ich bsw. Februar, Januar, Dezember, November, Oktober am Ende herausbekomme.

Grund:
Ich möchte für eine Blog-Anwendung eine Seiteleiste anbieten, welche die Artikel nach Monat sortieren.
 

Suxxess

Vice Admiral
Dabei seit
Feb. 2005
Beiträge
6.812
Dann poste mal einen Datensatz aus deiner Datenbank.
z.B. ID, Name, Datum, Uhrzeit, Betrag

Und steht dir PHP zur Verfügung?
 

r0b0t

Ensign
Dabei seit
Juni 2010
Beiträge
202
Entweder du berechnest das, oder baust dir eine kleine Hilfstabelle:

Key Value
1 "Januar, Dezember, November, Oktober, September"
2 "Februar, Januar, Dezember, November, Oktober"
3 "März, ..."

oder

Key Value1, Value2, ..., Value5
1 "Januar", "Dezember", ...
2 "Februar", ...
3 "März", ...
 

-=Renegade=-

Lt. Junior Grade
Dabei seit
Nov. 2006
Beiträge
407
In Oracle steht dir Add_Month zur Verfügung, in MySQL hast du z.B. Date_Sub. Welche DB hast du?

so long
 

selberbauer

Captain
Ersteller dieses Themas
Dabei seit
Juni 2009
Beiträge
3.604
Hi,

ich habe eine MySQL Datenbank.


Also eine Tabelle besteht aus:
id, title, author, content, createdAt, updatedAt

Nun könnte die Datenbank alle Objekte der letzten 5 Monate ausgeben und von jedem Monat einsverlangen.

Entweder du berechnest das, oder baust dir eine kleine Hilfstabelle:
Das Problem ist, dass es manchmal Monate gibt, wo man nichts in den Blog schriebt und Monate, wo der Blog noch neu ist..
 

benneq

Admiral
Dabei seit
Juli 2010
Beiträge
9.233
Was für einen Typ haben deine Felder denn? Datetime, Timestamp?
 

benneq

Admiral
Dabei seit
Juli 2010
Beiträge
9.233

-=Renegade=-

Lt. Junior Grade
Dabei seit
Nov. 2006
Beiträge
407
Soweit ich weiß unterstützt MySQL IF oder IFNULL im Query, wenn du es also über ein einziges komplexes MySQL Query machen willst, wo du für die letzten fünf Monate überprüfst ob ein Eintrag existiert, dann kannst du für jeden der 5 Monate ein Subquery machen, in dem du mithilfe der Sub_Date Methode überprüfst, ob für den jeweiligen Zeitraum ein Eintrag existiert. Die Ausgabe kannst du dann bereits mit DATE_FORMAT(%M) vorformatieren.

Ist zwar nicht sehr wartungsfreundlich, aber das spielt vermutlich keine Rolle ;)
 

Ironie

Lieutenant
Dabei seit
Dez. 2005
Beiträge
653
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
-> 'Saturday October 1997'

mit %M (großes M) bekommst du also den Monatsnamen eines Datums.
Jetzt ziehst von dem datum noch jeweild 5x 1Monat ab, dann hast du die letzten Monate
eines bestimmten datums.

Glaub die Funktion fürs aktuelle Datum ist CURDATE() in MYSQL.


Edit:
mysql> SELECT '1997-10-04 22:23:00' - INTERVAL 1 MONTH;
-> '1997-09-04 22:23:00'

Grüße
 
Zuletzt bearbeitet:

selberbauer

Captain
Ersteller dieses Themas
Dabei seit
Juni 2009
Beiträge
3.604
Hmm gibt es eigentlich auch noch eine einfache Möglichkeit ohne Datenbank die letzten 5 Monate mit deutschen Namen von PHP zu bekommen?
 

Daaron

Fleet Admiral
Dabei seit
Dez. 2011
Beiträge
13.487
im Zweifel über ne clevere Kombination (unter anderem) aus ner Schleife, time() und strtotime("-$i month")
 

-=Renegade=-

Lt. Junior Grade
Dabei seit
Nov. 2006
Beiträge
407
PHP:
$date = new DateTime();
for($i = 0; $i < 5; $i++) {
  echo $date->format('F');
  $date->sub(new DateInterval('P1M'));
}
so long
 

benneq

Admiral
Dabei seit
Juli 2010
Beiträge
9.233
Ich habe noch eine Alternative: Du trennst deine kompletten DateTime Werte auf in: YYYY MM DD HH MM SS und dann speicherst du alles in seperaten Spalten in der DB. Damit wär die Abfrage extrem einfach, natürlich ist es nicht sonderlich 'schön'... aber einfach! :D
 

Daaron

Fleet Admiral
Dabei seit
Dez. 2011
Beiträge
13.487
Warum sollte man das tun? Man kann doch die Datenbank bei Datetime-Spalten problemlos nach Day, Month, Year oder sonstwas fragen. Den Rest kann man problemlos über PHP lösen.
 
Top