Avatar billede fjammi Nybegynder
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?
Avatar billede jaw Nybegynder
27. september 2005 - 15:36 #1
Måske:

SELECT navn, dato WHERE dato > NOW() LIMIT 3
Avatar billede jaw Nybegynder
27. september 2005 - 15:38 #2
Der skal selvf. lige en tabel på også :)

SELECT navn, dato FROM fodselsdage WHERE dato > NOW() LIMIT 3
Avatar billede fjammi Nybegynder
27. september 2005 - 15:38 #3
nej det dur jo ikke for alle fødselsdage er jo mindre en now()
Avatar billede fjammi Nybegynder
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
Avatar billede coderdk Praktikant
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
Avatar billede jaw Nybegynder
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 :)
Avatar billede jaw Nybegynder
27. september 2005 - 15:43 #7
Arj, bare glem det ! Misforstod dit spørgsmål, som du nok kan se...
Avatar billede coderdk Praktikant
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;
Avatar billede coderdk Praktikant
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)
Avatar billede fjammi Nybegynder
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
Avatar billede coderdk Praktikant
27. september 2005 - 15:47 #11
Hmm, nej det tænkte jeg ikke lige på ;)
Avatar billede fjammi Nybegynder
28. september 2005 - 17:44 #12
ingen der kan hjælpe?
Avatar billede ksoren Nybegynder
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
Avatar billede fjammi Nybegynder
30. september 2005 - 11:14 #14
Jep det virker.
Tak for hjælpen.
-ksoren: lig et svar så du kan få dine point
Avatar billede fjammi Nybegynder
27. oktober 2005 - 11:28 #15
Ksoren vil du ikke have dine points?
Avatar billede fjammi Nybegynder
21. november 2005 - 00:15 #16
Lukker...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester