Avatar billede ske-til-php+mysql Nybegynder
13. februar 2003 - 19:58 Der er 21 kommentarer og
1 løsning

brugere + alder

Hey..

Jeg vil oprette en tabel med nogle brugere... Der skal bl.a. være angivet deres alder

Hvordan kan jeg så lave det på den nemmeste måde så det udelukkende er MySQL serveren der beregner alder på hver bruger...

Det skal være sådan at feltet med alder bliver angivet i en tidsenhed (så det også virker før 1970), så man f.eks. kan trække de brugere ud der er under 20 år??

Hvordan skal en sådan tabel struktureres og hvordan skal mysql_query'en se ud når man så vil trække de pågældende brugere ud efter alder??
Avatar billede erikjacobsen Ekspert
13. februar 2003 - 20:01 #1
Du skal vel bare opbevare fødselsdatoen som et DATE-felt: 1960-12-03
Avatar billede ske-til-php+mysql Nybegynder
13. februar 2003 - 20:03 #2
Kan du ikke give mig et eksempel? Er ikke så hård til MySQL
Avatar billede ske-til-php+mysql Nybegynder
13. februar 2003 - 20:58 #4
Nu er jeg helt forvirret...

Kan du ikke give mig et lille eksempel på hvordan jeg så kan udtrække brugere der er over 18 år??

Jeg har siddet og set på linket du gav, men er helt blank :(
Avatar billede ske-til-php+mysql Nybegynder
13. februar 2003 - 20:58 #5
hvis jeg så bruger det DATE-felt som du viste
Avatar billede alrua Nybegynder
13. februar 2003 - 22:12 #6
SELECT * FROM tabel WHERE YEAR(datofelt) > 1984

siger vel sig selv? ;)
eller se her: http://www.mysql.com/doc/en/Date_and_time_functions.html
Avatar billede ske-til-php+mysql Nybegynder
13. februar 2003 - 22:30 #7
jeps.. men hvordan kan man så finde selve alderen...??

bær lidt over med mig... hehe
Avatar billede alrua Nybegynder
13. februar 2003 - 22:32 #8
brug denne her funktion...bare hent det ud af databasen (helt normalt uden at gøre noget ved det) og smid det gennem denne her funktion - så får du alderen :)

function calc_age($birthday) //$birthday er fødseldag i formatet ÅÅÅÅ-MM-DD
{

    $time_now = explode('-', date('Y-m-d', time()));
    $time_birthday = explode('-', $birthday);
    if($time_birthday[0] == '0000') {return 'N/A';}

    $age = $time_now[0] - $time_birthday[0];

    if($time_now[1] < $time_birthday[1] || ( $time_now[1] == $time_birthday[1] && $time_now[2] < $time_birthday[2] ) ) {
        $age--;
    }

    return $age;
}
Avatar billede ske-til-php+mysql Nybegynder
13. februar 2003 - 22:36 #9
jeg har jo allerede en funktion der kan beregne alderen ud fra en INT

eks.

function age($birth)
{
    $year = substr($birth, 0, 4);
    $month = substr($birth, 4, 2);
    $day = substr($birth, 6, 2);
   
    if($month < date(m)) $age = date(Y)-$year;
    elseif($month == date(m) && $day >= date(d)) $age = date(Y)-$year;
    else $age = date(Y)-$year-1;
   
    return $age;
}

echo age(19820105);

problemet er at jeg skal have en måde hvor det UDELUKKENDE er MySQL serveren der beregner det!!! :)
Avatar billede alrua Nybegynder
13. februar 2003 - 22:40 #10
nåeh...hvorfor det? :P
Avatar billede ske-til-php+mysql Nybegynder
13. februar 2003 - 22:49 #11
fordi ;)

ej, jeg vil gerne lave det sådan at MySQL tager sig af det i stedet for et der skal sendes data mellem PHP og MySQL inden resultatet kommer ud...
Avatar billede alrua Nybegynder
13. februar 2003 - 22:53 #12
hmm...du kan jo prøve at kigge lidt på mysql-funktionen PERIOD_DIFF og så være lidt kreativ ;)
Avatar billede ske-til-php+mysql Nybegynder
13. februar 2003 - 22:55 #13
kender ikke den funktion..

kan du kort forklare hvad den gør?? :)
Avatar billede alrua Nybegynder
13. februar 2003 - 22:56 #14
kig i dokumentationen - den giver forskellen i måneder mellem to tidspunkter - men det er vel ikke præcist nok... :/
Avatar billede alrua Nybegynder
13. februar 2003 - 22:57 #15
kig den der side med dato-funktioner igennem og vælg en du kan bruge :D
Avatar billede ske-til-php+mysql Nybegynder
13. februar 2003 - 23:00 #16
link?? :)
Avatar billede alrua Nybegynder
13. februar 2003 - 23:02 #17
http://www.mysql.com/doc/en/Date_and_time_functions.html
det her virker måske:

SELECT (YEAR(now()) - YEAR
(datofelt)) - (MID(now(), 6, 5) < MID(datofelt, 6, 5))
FROM `tabelnavn` WHERE 1
Avatar billede alrua Nybegynder
13. februar 2003 - 23:02 #18
tror faktisk det der eksempel virker :)
Avatar billede ske-til-php+mysql Nybegynder
14. februar 2003 - 10:14 #19
Jeg kan ikke få det til at virke... :(
Avatar billede ske-til-php+mysql Nybegynder
14. februar 2003 - 10:22 #20
Jeg har forsøgt med den her, men det virker sq heller ikke??

SELECT round((TO_DAYS(NOW())-TO_DAYS(birth))/365) AS age FROM users
Avatar billede ske-til-php+mysql Nybegynder
14. februar 2003 - 10:24 #21
eller med skudår

SELECT round((TO_DAYS(NOW())-TO_DAYS(birth))/365,25) AS age FROM users
Avatar billede ske-til-php+mysql Nybegynder
16. februar 2003 - 10:29 #22
SELECT *, round((TO_DAYS(NOW())-TO_DAYS(birth))/365,25) AS age FROM users  HAVING age>='15' && age<='20'
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
Computerworld tilbyder specialiserede kurser i database-management

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