Avatar billede inctor Nybegynder
05. maj 2010 - 13:42 Der er 7 kommentarer og
1 løsning

Fødselsdag i UNIX timestamp.

Hej alle,

Jeg har en række brugere i min tabel, hvor deres fødselsdag er indsat som Unix Timestamp.

Men nu er mit spørgsmål så,
Hvis jeg nu via. en søgning skal hente alle de brugere ud, som er mellem 19 og 23 år gammel.

Hvordan kan jeg gøre dette ?
Avatar billede showsource Seniormester
05. maj 2010 - 13:55 #1
Umiddelbart ville jeg lave et nyt felt, DATE, og så lave en query som indsætter fødselsdato i det nye felt.

Og derefter:

$all = "SELECT navn,
        (YEAR(CURDATE())-YEAR(foedt))-(RIGHT(CURDATE(), 5)<RIGHT(foedt, 5)) as aar
        FROM
        brugeretabel WHERE aar BETWEEN 19 AND 23";
Avatar billede showsource Seniormester
05. maj 2010 - 13:59 #2
Hov, WHERE skal være HAVING
Avatar billede DGudiksen Nybegynder
05. maj 2010 - 14:22 #3
hvis du vil lave det i UNIX Timestamp, skal du første finde ud af hvor mange sekunder 19 år er, og hvor mange sekunder 23 år er.

Det gøres således: 60*60*24*365*19 = 19 år / 599184000 Og 23 år udregning ligeledes: 60*60*24*365*23 = 23 år / 725328000.

Derefter laver du bare en alm søgning i din database således her:


$19 = 60*60*24*365*19;
$23 = 60*60*24*365*23;
mysql_query("SELECT * FROM brugertabel WHERE foedt BETWEEN $19 AND $23");


Jeg håber at dette hjalp dig lidt på vej, ellers må du jo spørge frem :)
Avatar billede showsource Seniormester
05. maj 2010 - 14:34 #4
Nu har hvert år jo ikke samme antal dage !
Avatar billede DGudiksen Nybegynder
05. maj 2010 - 14:36 #5
showsource, det har du enlig helt ret i - Det tænkte jeg ikke lige over :D Så bliver den lidt mere tricky ja.

Gad vide om PHP i har samme funktion et eller andet sted som MSL har, hvor man kan sige at man gerne vil have regnet sekunderne ud ved at angive dagen tilbage i tiden, eller frem i tiden.
Avatar billede showsource Seniormester
05. maj 2010 - 14:57 #6
Når jeg taler for at bruge standard datoeformat, er det bl.a. fordi der er et hav af tid funktioner med mysql.

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html

Og datoer før 1970 kan jo også bruges efterflg.

mysql_query("ALTER TABLE tabelnavn ADD fdato DATE NOT NULL DEFAULT '0000-00-00'") or die (mysql_error());


mysql_query("UPDATE tabelnavn SET fdato = FROM_UNIXTIME(sekunder, '%Y-%m-%d')") or die (mysql_error());

Så bliver en query til:

$all = "SELECT navn,
        (YEAR(CURDATE())-YEAR(fdato))-(RIGHT(CURDATE(), 5)<RIGHT(fdato, 5)) as aar
        FROM
        tabelnavn HAVING aar BETWEEN 19 AND 23";
Avatar billede inctor Nybegynder
06. maj 2010 - 14:11 #7
Jeg fandt en lidt mere simpel metode at gøre det på

WHERE birthday > '".strtotime("now -19 years")."' AND birthday < '".strtotime("now -23 years")."'

Men lig et svar jer 2, så får i point som tak for jeres input.
Avatar billede showsource Seniormester
06. maj 2010 - 14:52 #8
Well, bare du ikke får nogen brugere som er født før 1970 kan det jo lade sig gøre! :O)
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