Aktuelle Geburtstage aus MySQL-Datenbank auslesen
03.03.2007 - 12:11 PHP-MySQL, CakePHP 24 Kommentar(e)Puh, das war ein hartes Stück Arbeit. Für ein aktuelles Projekt, welches ich mit CakePHP umsetze, war es nötig aus einer Mitarbeiterdatenbank alle Geburtstagskinder der nächsten bzw. letzten 5 Tage auszulesen, und dazu auch gleich das Alter und die Tage bis zum Geburtstag zu berechnen.
Mit Hilfe des Tutorials-Forums kam ich auf den richtigen Weg, und habe nun einen MySQL-Query, der sowohl mit Schaltjahren, als auch Jahresübergängen einwandfrei zu funktionieren scheint. Da ich sicherlich nicht der letzte mit diesem Problem bin, wollte ich euch den Query nicht vorenthalten…
Hier mein SQL-Query
SELECT `id`, `name`, `vorname`, `geburtstag`, YEAR( CURRENT_DATE( ) ) - YEAR( geburtstag ) age, 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 `xxx_mitarbeiter` HAVING `days_to_birthday` <= 6 OR `days_to_birthday` >= 360 ORDER BY days_to_birthday
Zur Erklärung:
Der Query selektiert zuerst einmal alle “normalen” Felder. Danach wird ein virtuelles feld age angelegt, welches durch eine Subtraktion das “zukünftige” Alter beinhaltet. Danach werden dann in einem weiteren virtuellen Feld, days_to_birthday ,die Tage bis zum nächsten Geburtstag abgelegt.
Hinweis: Die Geburtstage müssen den Feldtyp DATE oder DATETIME tragen, also im Format YYYY-MM-DD bzw. YYYY-MM-DD HH:MM:SS vorliegen.
Zum Schluss werden durch HAVING alle Geburtstag der nächsten 6 Tage selektiert, und darunter die der letzten 6 Tage (logisch, da der nächste Geburtstag der Person dann ja wieder 36x Tage entfernt liegt.
Man gebe noch etwas PHP, HTML & CSS hinzu, rühre drei mal um, und erhält dann evtl. so etwas ähnliches wie auf dem Artikelbild.
Ich hoffe das hilft einigen Geplagten weiter :)
Kommentare zum Thema Aktuelle Geburtstage aus MySQL-Datenbank auslesen:
Jo auch von mir ein dickes Danke!
Hallo,
vielen Dank für dieses super Script.
Ich arbeite gerade an einem privaten Projekt bei dem unteranderem auch ein Geburtstagsprüfer benötigt wird und da hat mir dieses Script eine Menge Arbeit abgenommen.
Mein erster Ansatz war folgender:
select `name` from person where
(YEAR)-YEAR) – (RIGHT,5)<RIGHT)
<>
(CURDATE(">YEAR, INTERVAL 7 day))-YEAR) – (CURDATE(">RIGHT, INTERVAL 7 day),5)<RIGHT)
Ist aber lange nicht so flexibel wie die Lösung von dir :)
Funktioniert Super, vielen Dank
Das Alter wird im Dezember bei Leuten die im Januar Geburtstag haben nicht korrekt berechnet, ansonsten sehr schön :-)
funzt das auch über einen jahreswechsel hinweg? vor allem das “zukünftige alter” sieht mir da gefährlich aus nach der methode … (also geb am 02.01. und heute ist der 31.12.)
Jap …
+ IF(DATE_FORMAT(CURRENT_DATE, “%m%d”) > DATE_FORMAT(`geburtstag`, “%m%d”), 1, 0)
… fehlt beim zukünftigen-age-selecten auch noch (für Jahresüberlauf)
“Man gebe noch etwas PHP, HTML & CSS hinzu,…”
Könnte das jemand etwas konkretisieren?
Bin neu in dem Sektor und wüßte gerne, wie ich die Geburtstagskindern denn nun auch ausgeben kann…
Würde mir jemand helfen?
Vielen Dank für das tolle Skript!!
Sorry, Dein Code in Bezug auf das Alter ist falsch. Da Deine Homepage den SQL Code zerstört hier im Klartext. So geht’s:
Jahr(Aktuelles Datum)-Jahr(Geburtstag) – ((Monat-Tag-Aktuelles Jahr) < Monat-Tag-Gebrutstag) as age —-> 1 wird abgezogen wenn Geburtstag noch nicht vorbei
Du hast vergessen, dass man ja schon ein Jahr älter ist, wenn der Geburtstag vorbei ist, obwohl das Jahr das gleich ist. Diese Code kann man dann auch anstellen des umständlichen if verwenden.
Danke! Danke! Danke!
Habe selbst schon so einiges gebastelt, war aber nicht wirklich zufrieden. Hier ist die perfekte Lösung. (Nr 17 beachten!)
Für die, die es nicht ganz so kompliziert braucht und nur die Leute haben will, die z.b. in den nächsten 7 tagen b-day haben, wäre mein Vorschlag:
WHERE MONTH (bday) = MONTH (NOW ()) AND (DAY (bday) BETWEEN DAY (NOW ()) AND DAY (ADDDATE (NOW (), 6)))
ACHTUNG: die ganzen Leerzeichen wieder entfernen, ohne die wäre der query von der blogsoftware nicht akteptiert und verunstaltet worden…
Ich brauche ein Geburtstagsscript, das mir jeden Monat die geburtstagskinder anzeig tdie in dem Monat geburtstag haben und das script soll sich automatisch aktuallisieren wenn der nächste monat kommt. also immer am 1. des monats die neue Liste. Mit tag monat und Jahr und vielleicht noch in Klammern dahinter, wie alt man wird. Habe bisher noch keine erfahrung mit php mysql. Bsher habe ich meine geburtstage immer manuell eingetragen in eine Div-Box. Link zur Seite ist bei meinem namen. Einfach mal klicken und bitte helfen. ich verpass es manchmal die geburtstage am 1. einzutragen und deshalb wurden schon einige Geburtstagskinder vergessen und waren ziemlich sauer auf mich.
Kommentar-Feed für diesen Artikel
Kommentarfunktion für diesen Artikel geschlossen.
Seiten ins DMOZ! Nur dieses Wochenende! Bildreflektionen mit JavaScript


Hallo Christian,
du hast mir der obrigen SQL-Query einige Stunden Arbeit abgenommen.
Vielen Dank dafür.