Geburtstag(e) von SQL Tabelle mit DATE Format

Welche MySQL-Version nutzt du wenn ich fragen darf, und wie sieht dein Query derzeit aus, dann kann ich evtl. noch einmal vergleichen.

Danke im Voraus..
 
MySQL 4.1.11

$sqlgebtag = "SELECT `userid`, `birthday`, `username`, YEAR(CURRENT_DATE()) -YEAR(birthday) age, datediff(MAKEDATE(YEAR(CURRENT_DATE())+1,IF(DAYOFYEAR(birthday) > DAYOFYEAR(LAST_DAY(MAKEDATE(YEAR(CURRENT_DATE()), 365))),DAYOFYEAR(LAST_DAY(MAKEDATE(YEAR(CURRENT_DATE()), 365))),DAYOFYEAR(birthday)) ), CURRENT_DATE() ) % DAYOFYEAR(LAST_DAY(MAKEDATE(YEAR(CURRENT_DATE()), 365))) days_to_birthday FROM bb1_users WHERE userid IN (".implode(', ', $buddys).") HAVING days_to_birthday <= 10";
 
Sehr seltsam, also meine MySQL version is die gleiche.

Der Query scheint eigentlich auch zu passen, in welchem Format liegen denn deine Geburtstage in der Datenbank?

Ich habe meine mit Uhrzeit hinterlegt also 1984-06-29 00:00:00, ob das was ausmacht?

Also hier mal mein Query und der Result...echt krasser "Fehler".

Der Query:
Code:
SELECT `id` , `geburtstag` , `name` , `vorname` , YEAR( CURRENT_DATE( ) ) - YEAR( geburtstag ) age, datediff( MAKEDATE( YEAR( CURRENT_DATE( ) ) +1, IF( DAYOFYEAR( geburtstag ) > DAYOFYEAR( LAST_DAY( MAKEDATE( YEAR( CURRENT_DATE( ) ) , 365 ) ) ) , DAYOFYEAR( LAST_DAY( MAKEDATE( YEAR( CURRENT_DATE( ) ) , 365 ) ) ) , DAYOFYEAR( geburtstag ) ) ) , CURRENT_DATE( ) ) % DAYOFYEAR( LAST_DAY( MAKEDATE( YEAR( CURRENT_DATE( ) ) , 365 ) ) ) days_to_birthday
FROM ordo_mitarbeiter
HAVING days_to_birthday <=10

Und das kommt raus:
Code:
id 	geburtstag 	name 	vorname 	age 	days_to_birthday
63 	1985-03-03 00:01:01 	König 	Patrick 	22 	1
60 	1984-03-01 00:00:02 	Mühlbach 	Mike 	23 	0
62 	1984-03-02 00:00:00 	Vogt 	Christian 	23 	1
 
Zuletzt bearbeitet:
Also ich hab jetzt mal von DATETIME auf DATE (eigentlich auch logischer) gewechselt...und da gibts exakt das gleiche Bild...

Code:
SELECT id, name, vorname, geburtstag, date_format( geburtstag, '%Y' ) AS gyear, date_format( geburtstag, '%d' ) AS gday, YEAR( CURRENT_DATE( ) ) - YEAR( geburtstag ) age, datediff( MAKEDATE( YEAR( CURRENT_DATE( ) ) +1, IF( DAYOFYEAR( geburtstag ) > DAYOFYEAR( LAST_DAY( MAKEDATE( YEAR( CURRENT_DATE( ) ) , 365 ) ) ) , DAYOFYEAR( LAST_DAY( MAKEDATE( YEAR( CURRENT_DATE( ) ) , 365 ) ) ) , DAYOFYEAR( geburtstag ) ) ) , CURRENT_DATE( ) ) % DAYOFYEAR( LAST_DAY( MAKEDATE( YEAR( CURRENT_DATE( ) ) , 365 ) ) ) days_to_birthday
FROM ordo_mitarbeiter
HAVING days_to_birthday <6
OR days_to_birthday >360
ORDER BY days_to_birthday, gday

Ergibt:

Code:
id 	name 	vorname 	geburtstag 	gyear 	gday 	age 	days_to_birthday
60 	Mühlbach 	Mike 	1984-03-01 	1984 	01 	23 	0
62 	Vogt 	Christian 	1984-03-02 	1984 	02 	23 	1
63 	König 	Patrick 	1985-03-03 	1985 	03 	22 	1
61 	Karalus 	Birte 	1991-02-28 	1991 	28 	16 	363

Ich werd nachher mal auf nem anderen Server das ganze probieren, aber schon sehr seltsam. Gibts denn evtl. ne Möglichkeit das Feld days_to_birthday bei nem gerade Geburtsjahr automatisch um den Wert 1 zu subtrahieren?...obwohl das auch nicht klug wäre, denn wie ihr sehr brauche ich auch die alten Geburtstage, die sollen nicht verschwinden wenn der Geburtstag vorbei ist, sondern halt erst n paar Tage später :/
 
Also ich bins nochmal, am Server liegts definitiv nicht, habs auch mit MySQL 5 ausprobiert.

Der Fehler liegt im Schaltjahr. Ist jemand in einem Schaltjahr geboren hat er immer einen tag später Geburtstag. Hat jemand ne Idee wie man das umgehen kann?
 
Hallo,

die von mir vorgestellte Lösung lässt sich auch von Schaltjahren nicht draus bringen. Hier nochmal in etwas angepasster Form:
Code:
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
	`ordo_mitarbeiter`
HAVING
	`days_to_birthday` <= 10;

Grüße,
Matthias
 
Zuletzt bearbeitet:
Matthias, du bist mein Retter. So klappts wirklich...endlich, die perfekte Lösung, werde ich nachher direkt mal in meinem Blog veröffentlichen.

@maga147: Schau mal ob du nicht evtl. bei Schaltjahren der selben Fehler bekommst.
 
na dann werd ich sicherheitshalber mal die von Matthias einbringen :)

Danke, :) hätte zu unschönen Bugs geführt! :)
 

Neue Beiträge

Zurück