Geburtstag(e) von SQL Tabelle mit DATE Format

maga147

Erfahrenes Mitglied
Hi,

Ich glaub ich steh grad voll auf der Leitung........
und zwar hab ich eine Tabelle, die per DATE ein Feld hat, in dem Geburtstage drin sind.

Jetzt möchte ich immer die nächsten 7 Tage auslesen, und die Geburtstage ausgeben.

Aber leider weis ich im mom nicht wie ich das per SELECT lösen kann, weil ja date(geburtstag) - date(now()) nicht geht, da bei Geburtstag das Geburtsjahr hinterlegt ist usw.....

Ich hoffe ihr könnt mir helfen.... :rolleyes:
 
Hmm sorry, ne geht leider nicht!

Bekomme ALLE Geburtstage........ vielleicht liegts an meiner Version: MySQL 4.1.11
 
Hi!

An der Version sollte es nicht liegen.
Aber: z.Z. werden alle Geburtstage gezeigt, die vor (heute + sieben Tage) liegt und da wir uns fast am Ende des Jahres befinden, düften das beinahe alle sein ;)

SQL:
SELECT *
FROM dates
WHERE (DAYOFYEAR(dat) => DAYOFYEAR(NOW()) AND DAYOFYEAR(dat) < DAYOFYEAR(NOW()) + 7 )
...?

Liebe Grüße,
Mark.
 
Hi,

jetzt, so ganz kurz vor einem neuen Jahr, fällt mir auf, dass die Geburtstage, die nach dem 31.12. (also im neuen Jahr) sind, nicht mehr ausgelesen werden :(

Kann mir einer den Fehler bzw. Verbesserungsvorschlag sagen, weil mit der "dayofyear" - Funktion geht das denk ich nicht.... bzw. ich habs nicht hinbekommen.



Danke :)!
 
Probier mal folgende Abfrage:
Code:
SELECT
        …
  FROM
        `dates`
  WHERE
        (TO_DAYS(CONCAT(YEAR(CURRENT_DATE), "-", DATE_FORMAT(`dat`, "%m-%d"))) - TO_DAYS(CURRENT_DATE) + 366) % 366 < 7
Die Bedingung kann auch gleichzeitig dazu genutzt werden, um die Anzahl der Tage bis zum nächsten Jahrestag auszugeben:
Code:
SELECT
        (TO_DAYS(CONCAT(YEAR(CURRENT_DATE), "-", DATE_FORMAT(`dat`, "%m-%d"))) - TO_DAYS(CURRENT_DATE) + 366) % 366 AS `Tage_bis_zum_Jahrestag`
  FROM
        `dates`
  HAVING
        `Tage_bis_zum_Jahrestag` < 7
 
Hi,

ich hab den WHERE teil jetzt mal so in mein PHP Script eingebaut:

Code:
WHERE (TO_DAYS(CONCAT(YEAR(CURRENT_DATE), '-', DATE_FORMAT(`birthday`, '%m-%d'))) - TO_DAYS(CURRENT_DATE) + 366) % 366 < 7 AND userid IN ('5','13') ORDER by MONTH(birthday),DAY(birthday) asc

Ist das noch das gleiche? Weil ich hab bei zwei dingen das " zu einem ' gemacht....

Ausgelesen wird mir nämlich nichts :(
 
Wieso verwendest Du für den Verlgleich nicht den UNIX_TIMESTAMP? Damit ist es egal, ob das Jahr wechselt oder nicht.

Pseudocode:
Code:
SELECT * 
FROM geburtstagstabelle 
WHERE UNIX_TIMESTAMP(geburtstag)>now() 
AND UNIX_TIMESTAMP(geburtstag)<(now()+604800)
Wobei 604800 = der Anzahl an Sekunden in sieben Tagen.

Solange du nur 7 Tage in die Zukunft möchtest, ist es kein Problem. Nach hinten gehts halt nur bis 1970...
Also so hätt ich das mal versucht zu lösen.

Ciao,
Mike
 

Neue Beiträge

Zurück