geburtstagserinnerung

pangu

Angesehenes Mitglied
möchte eine geburtstagserinnerung realisieren:

geburtstag des users ist jeweils als 'geburtstag' (datetime) gespeichert.

mit
SELECT DATEDIFF(geburtstag,'$heute')
habe ich zumindest schonmal die differenz.

wie kann ich jetzt aber am besten z.b. alle user auslesen, die in <7 tagen geburtstag haben? thx
 
Also ich würd da einfach alle User in der Datenbank checken, heisst
deren Differenz berechnen, und falls die eben < 7 Tage ist diesen User ausgeben oder in ein Array speichern, falls du später damit noch was anfangen willst.

Oder du gehst den Weg über Timestamps, dann bist du noch flexibler und bastelst dir dafür einfach ein paar Funktionen.

Gruss

Elmi
 
QUOTE (pangu @ Mo 6.08.2007, 00:24) möchte eine geburtstagserinnerung realisieren:

geburtstag des users ist jeweils als 'geburtstag' (datetime) gespeichert.

mit
SELECT DATEDIFF(geburtstag,'$heute')
habe ich zumindest schonmal die differenz.

wie kann ich jetzt aber am besten z.b. alle user auslesen, die in <7 tagen geburtstag haben? thx

hi,
ich gehe mal davon aus das es Mysql ist.

Kenne mich mit Mysql gar nicht aus eher mit andere Sql Softwares.

Ich weiß nicht ob er dies als Sekunde oder Millisekunden zurück gibt.
Versuche mal in der art von:
7 tage als sekunden wäre: 604800
SELECT geburtstag where DATEDIFF(geburtstag,'$heute')<604800;



 
ja, aber geburtstag der user ist ja als datetime, also z.b. tt//mm//jjjj
sprich er nimmt als differenz ja auch noch die jahre/monate mit, differnez alleine reicht also nicht.. :/
-> keiner ne idee? wird doch wohl ein häufiges problem sein, oder?
 
$times= time();
date ("d.m.y H:m.i",$times);

kannst ja auch :
$times= time();
date ("d.m.y",$times); // tag(xx),monat(xx),jahr(xxxx)

z.b.
$times= time()-(60*60*24*7);
if ($times > $geb)
{ echo "ah du hast Gebutstag !";
}else{ echo "kein geburtstag !"; }

naja das ganze ebend mit schleife oder wie du möchtest ist nur eine idee
wink.gif

meins du in so etwa ???kannst das ja noch verbessern
wink.gif
 
Bloss keine Schleifen!

Wofür gibt es denn eigentlich die MySQL Handbücher?

QUOTE
Just another example on how to figure out how many days are until some birthdate (in order to do a range query, or get the "next" birthday):

SELECT name, birthday,
IF(DAYOFYEAR(birthday) >= DAYOFYEAR(NOW()),
DAYOFYEAR(birthday) - DAYOFYEAR(NOW()),
DAYOFYEAR(birthday) - DAYOFYEAR(NOW()) +
DAYOFYEAR(CONCAT(YEAR(NOW()),'-12-31')))
AS distance
FROM birthdates;

The + DAYOFYEAR(CONCAT(YEAR(NOW()),'-12-31')) (which is 366 or 365, depending on whether we're in a leap year or not) takes care of the New Year's Eve wrap around.

You could add WHERE distance <= 10 or ORDER BY distance ASC LIMIT 1 at the end of the query, for example.



nachzulesen unter:
http://dev.mysql.com/doc/refman/5.0/en/dat...-functions.html
 
super danke!!
smile.gif


damit funktioniert schonmal, dass ich den nächsten geburtstag auslesen kann:
QUOTE SELECT id,name, geburtstag, IF(DAYOFYEAR(geburtstag) >= DAYOFYEAR(NOW()), DAYOFYEAR(geburtstag) - DAYOFYEAR(NOW()), DAYOFYEAR(geburtstag) - DAYOFYEAR(NOW()) + DAYOFYEAR(CONCAT(YEAR(NOW()),'-12-31'))) AS distance FROM user ORDER BY distance ASC LIMIT 1



wie kann ich jetzt aber auslesen, dass die user, die in den nächsten 10 tagen geburtstag haben ausgegeben werden?

QUOTE SELECT id,name, geburtstag, IF(DAYOFYEAR(geburtstag) >= DAYOFYEAR(NOW()), DAYOFYEAR(geburtstag) - DAYOFYEAR(NOW()), DAYOFYEAR(geburtstag) - DAYOFYEAR(NOW()) + DAYOFYEAR(CONCAT(YEAR(NOW()),'-12-31'))) AS distance FROM user WHERE distance <= 10


funktioniert bei mir komischwerweise nicht, erhalte:

QUOTE Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in ...


-> woran kann das liegen/wie mache ich es richtig? thx
 
Das Beispiel wurde für MySQL 5 geschriben. Hast Du die gleiche Version?

Ich würde statt WHERE eher HAVING benutzen. Probier's!
 
Zurück
Oben