Posts Tagged ‘PHP’

MySQL Problem Geburtstage aus Datenbank und Jahreswechsel

Dienstag, Juli 17th, 2012

Hallo Leute, für eines meiner Projekte habe ich eine Funktion gesucht welche mir Geburtstage bzw. sich jährende Events der kommenden 7 Tage anzeigt. Nachdem in sehr vielen Foren sehr viel Blödsinn geschrieben wurde (die Abfragen funktionieren meistens nur bis zum Jahreswechsel, ab Dezember versagen die meisten dieser Abfragen) und ich auf den richtigen Ansatz beim Hackthenet Blog erst nach Stunden intensiver Suche gestoßen bin, möchte ich euch auf diesem Weg eine weitere Chance bieten eine echte Lösung für das Problem zu finden. Hier der Code der astrein funktioniert und sowohl das Problem mit dem Jahreswechsel als auch die Schaltjahr Problematik lösen kann OHNE daß die Abfrage unglaublich aufgebläht ist (nochmal DANKE an Christian Vogt dafür!!!):

SELECT ID, Name, Vorname, Geburtstag,
DATEDIFF(`Geburtstag` + INTERVAL
(YEAR(CURRENT_DATE) – YEAR(`Geburtstag`) +
IF(DATE_FORMAT(CURRENT_DATE, ‚%m%d‘) >
DATE_FORMAT(`Geburtstag`,’%m%d‘), 1, 0))
YEAR, CURRENT_DATE) AS `days_to_birthday`
FROM
Geburtstagskinder
HAVING
`days_to_birthday` <= 7
ORDER BY
days_to_birthday

Auf die Idee mit den „days_to_birthday“ hätte man auch selber kommen können, aber wie so oft ist man einfach häufig ziemlich Betriebsblind. Aber dafür gibt es ja nette Menschen im Internet die einem da helfen…

In der ursprünglichen Version (siehe Link) war die Abfrage noch um Geburtstage in der Vergangenheit ergänzt, dafür einfach die Abfrage bei:

HAVING
`days_to_birthday` <= 7

in

HAVING
`days_to_birthday` <= 7 or `days_to_birthday` >= 359

ändern, schon hat man auch alle Geburtstagskinder der vergangenen 7 Tage mit dabei :-)

Natürlich könnt ihr den Wert 7 in jede andere Anzahl Tagen in der Zukunft und 359 durch die Rechnung 366 – gewünschte Anzahl Tage in die Vergangenheit euren eigenen Wünschen und Vorgaben entsprechend anpassen.

Hoffe einigen von euch damit weiterhelfen zu können…