27. september 2005 - 15:32
Der er
15 kommentarer og 1 løsning
hent 3 næste fødselsdage
Hej Har en mysql-database med nogle navne og fødselsdage: Hans Hansen: 1973-05-23 Jens Jensen: 1986-11-05 osv. Nu skal jeg bruge et script der kan hente de 3 næste der har fødselsdage i forhold til dags dato. Hvor kan jeg lave dette?
Annonceindlæg fra Computerworld
27. september 2005 - 15:36
#1
Måske: SELECT navn, dato WHERE dato > NOW() LIMIT 3
27. september 2005 - 15:38
#2
Der skal selvf. lige en tabel på også :) SELECT navn, dato FROM fodselsdage WHERE dato > NOW() LIMIT 3
27. september 2005 - 15:38
#3
nej det dur jo ikke for alle fødselsdage er jo mindre en now()
27. september 2005 - 15:39
#4
En fødselsdag ser fx sådan ud: 1986-11-05 og now() ser sådan ud: 2005-09-27
27. september 2005 - 15:40
#5
SELECT navn, dato WHERE DATE_FORMAT( dato, '%m-%d' ) >= DATE_FORMAT( NOW(), '%m-%d' ) LIMIT 3 Den er dog ikke særlig optimal, da den skal scanne alle rækker, selv hvis du har et index på dato
27. september 2005 - 15:42
#6
Nå, jamen så må det vel være: SELECT navn, dato FROM fodselsdage WHERE dato < NOW() ORDER BY dato LIMIT 3 Men klart nok, havde jeg ikke helt luret :)
27. september 2005 - 15:43
#7
Arj, bare glem det ! Misforstod dit spørgsmål, som du nok kan se...
27. september 2005 - 15:44
#8
Hvis det er noget der skal ske tit, ville jeg ændre tabellen lidt: ALTER TABLE dintabel ADD birthmonthday char(5); ALTER TABLE dintabel ADD index (birthmonthday); UPDATE dintabel SET birthmonthday = DATE_FORMAT(dato, '%m-%d'); Og så ellers huske at sætte ind i det felt, når du sætter ind i dato... Så vil din nye query se sådan ud: SELECT navn, dato FROM dintabel WHERE birthmonthday >= DATE_FORMAT( NOW(), '%m-%d' ) LIMIT 3;
27. september 2005 - 15:44
#9
Nå ja, der skal nok være en ORDER BY birthmonthday på den query... (Måske også den anden)
27. september 2005 - 15:46
#10
der er kun 13 rækker i den tabel, så det går nok. Hvad sker der ved årsskifte, kan den så godt finde ud af at de næste fødselsdage er i januar
27. september 2005 - 15:47
#11
Hmm, nej det tænkte jeg ikke lige på ;)
28. september 2005 - 17:44
#12
ingen der kan hjælpe?
28. september 2005 - 21:49
#13
prøv noget i denne stil select navn, if(dayofyear(curdate()) > dayofyear(birth), dayofyear(birth)+365, dayofyear(birth)) as birth from personer order by birth limit 3
30. september 2005 - 11:14
#14
Jep det virker. Tak for hjælpen. -ksoren: lig et svar så du kan få dine point
27. oktober 2005 - 11:28
#15
Ksoren vil du ikke have dine points?
21. november 2005 - 00:15
#16
Lukker...
Vi tilbyder markedets bedste kurser inden for webudvikling