Moin!
eigentlich sollte er immer den aktuellen monat und die 2 darauf folgenden anzeigen.
Dann sage das der Datenbank: "Gib alle Einträge aus, die zwischen jetzt und in drei Monaten liegen."
SELECT * FROM prog WHERE datum BETWEEN NOW() AND adddate(NOW(), INTERVAL 2 MONTH)
Das liefert dir alles von HEUTE bis heute plus 2 Monate.
Die Sache ist die: Wenn du dich nur auf den Monat beziehst, kriegst du logischerwiese alle DB-Einträge aus allen Jahren, die in den gewünschten Monaten liegen. Das ist toll für Geburtstage - und eher unpassend für einen Kalender.
Selbst die Lösung für die Geburtstage ist nicht trivial. Du bist da schon in die Zerlegung des Query in drei Einzelabfragen geflüchtet. Das geht natürlich, ist nur nicht wirklich schön.
Wenn du also wirklich die einzelnen Monate (unabhängig vom Jahr) abfragen willst:
SELECT * FROM prog WHERE MONTH(datum) IN (MONTH(NOW()), MONTH(ADDDATE(NOW(), INTERVAL 1 MONTH)), MONTH(ADDDATE(NOW(), INTERVAL 1 MONTH))) ORDER BY datum;
Abfragen, in denen das Jahr berücksichtigt wird, sind auch nicht so schwierig - es ist halt die erste Abfrage so anzupassen, dass das Start- und Enddatum auf die Monatsgrenzen fallen.
Die Datumsfunktionen sind sehr interessant...
http://www.mysql.de/doc/de/Date_and_time_functions.html
- Sven Rautenberg
"Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
(fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)