Bobby: Geburtstage der letzten und kommenden 3 Tage

Beitrag lesen

Moin

5.) Und meine letzte Frage: Auch wenn meine Lösung funktioniert, würde ich trotzdem gerne den […]AS days\_to\_birthday Block der zuerst gefundenen Lösung verstehen. Kann mir das vielleicht wer ausdeutschen, was in diesem Teil der Query geschieht? Unter anderem verstehe ich die Stelle mit dem „ , 1, 0))“ nicht.

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`

Diese Funktion muss man von innen nach außen lesen (wie jede Funktion)

nehmen wir zuerst

DATE_FORMAT(CURRENT_DATE, "%m%d")

diese Funktion gibt ein Datumsfeld formatiert zurück (hier als %m%d (Monat im Format 00-12 und Tag des Monats als 00-31)

Es geht weiter

IF(DATE_FORMAT(CURRENT_DATE, "%m%d") >  
	DATE_FORMAT(`geburtstag`, "%m%d"), 1, 0)

es wird hier das aktuelle ebenso formatierte aAtum mit dem ausgelesenen formatierten verglichen. Wenn das aktuelle Datum größer als das ausgelesene (nur von Monat und Tag her), dann soll eine 1 zurückgegeben werden ansonsten eine 0

Und weiter im Text:

`geburtstag` +INTERVAL  
	(YEAR(CURRENT_DATE) - YEAR(`geburtstag`) +  
	IF(DATE_FORMAT(CURRENT_DATE, "%m%d") >  
	DATE_FORMAT(`geburtstag`, "%m%d"), 1, 0)) YEAR

hier ersetze ich mal mit 1 oder o des vorherigen Blocks ** 1|0 **

  
`geburtstag` + INTERVAL (YEAR(CURRENT_DATE) - YEAR(`geburtstag`) + ** 0|1** ) YEAR  

Hier der nächste Geburtstag des Users endweder auf dieses Jahr (Wennn er noch folgt) oder aufs nächste Jahr (wenn im aktuellen Jahr bereits vorbei) gesetzt.

Und als letztes noch die Datediff-Funktion

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)

hier wird die Differenz an Tagen zwischen dem errechneten nächsten Geburtstag und dem aktuellen Datum berechnet "DATEDIFF ( errechneter nächster geburtstag , aktuelles Datum)".

Und so erhält man eine Anzahl an Tagen zum nächsten Geburtstag als days\_to\_birthday.

Gruß Bobby

--
-> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
### Henry L. Mencken ###
-> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
## Viktor Frankl ###
ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)