Avatar billede supermand69 Nybegynder
12. september 2004 - 13:37 Der er 21 kommentarer og
1 løsning

beregne alder i query

hvordan kan man beregne alderen i sin query??

YEAR(SUBTIME(CURDATE(), user.birth))>='$_POST[age]'

jeg kan ikke få det ovenstående til at virke??
Avatar billede dsj Nybegynder
12. september 2004 - 14:12 #1
Den linie du viser, returnerer også blot, hvorvidt det beregnede år er større end eller lig værdien i $_POST[age].
Avatar billede supermand69 Nybegynder
12. september 2004 - 14:14 #2
ja det ved jeg... men hvis jeg laver den sådan her virker den stadig ikke... den returnere ikke noget som helst

SELECT YEAR(SUBTIME(CURDATE(), user.birth)) AS age ...
Avatar billede dsj Nybegynder
12. september 2004 - 14:18 #3
Lad mig gætte, den linie du viser, returnerer '1'?
Avatar billede dsj Nybegynder
12. september 2004 - 14:19 #4
Hvilken version af MySQL kører du med?

Prøv evt. at vis den del af PHP-koden, hvor du trækker værdien ud...
Avatar billede supermand69 Nybegynder
12. september 2004 - 14:22 #5
$sql = "SELECT name, YEAR(SUBTIME(CURDATE(), user.birth)) AS age, time
                FROM $DB.user
                WHERE id=$value";

MySQL 4.1.4-gamma-nt
Avatar billede terrak Nybegynder
12. september 2004 - 14:54 #6
SELECT DATE_FORMAT(
FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(`fødselsdag`)), '%Y')+0
AS age FROM 'tabel'

Venligst lånt fra http://dev.mysql.com/doc/mysql/en/Mathematical_functions.html (brugerkommentar)
Avatar billede terrak Nybegynder
12. september 2004 - 14:57 #7
den smuttede lige, der skulle selvfølgelig være `` rundt om tabel, ikke ''.

SELECT DATE_FORMAT(
FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(`fødselsdag`)), '%Y')+0
AS age FROM `tabel`

`fødselsdag` og `tabel` er så de eneste der skal skiftes ud.
Avatar billede supermand69 Nybegynder
12. september 2004 - 22:00 #8
hvad er det som er galt med den her?

SELECT YEAR(SUBTIME(CURDATE(), user.birth)) AS age ...
Avatar billede terrak Nybegynder
13. september 2004 - 15:49 #9
Functionen SUBTIME(expr1,expr2) forventer at expr1 er i formatet 'time' eller 'datetime', og at expr2 er i 'time' formatet.

CURDATE() returnerer ingen af de førnævnte formater - den returner i 'date' formatet.

Desuden tvivler jeg på at du opbevarer brugeren fødselsdato i 'time' formatet, som expr2 skal være :)

Ref: http://dev.mysql.com/doc/mysql/en/Date_and_time_functions.html
Avatar billede supermand69 Nybegynder
13. september 2004 - 22:00 #10
findes der så ikke noget som kan returnere i formatet time i stedet for CURDATE()??
Avatar billede supermand69 Nybegynder
14. september 2004 - 19:34 #11
terrek > jeg får en fejl når jeg bruger dit eksempel :(
Avatar billede supermand69 Nybegynder
14. september 2004 - 19:35 #12
dsj > bruger du selv det eksempel du kom med?
Avatar billede terrak Nybegynder
14. september 2004 - 21:24 #13
Hvilken fejl kommer den med, og hvordan ser den færdige kode ud, når du indsætter i mit eksempel?
Avatar billede supermand69 Nybegynder
14. september 2004 - 21:34 #14
$sql = "SELECT name, FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(user.birth)), '%Y')+0 AS age, time, sex, zip, area, pic
    FROM $DB.user
    WHERE id=$value";

min fejl kommer fatisk ved feltet time da jeg kører den gennem en funktion der laver en dato...

Warning: mktime(): Windows does not support negative values for this function in s:\http\_www\elektrobeat.dk\gfx\req\functions.php on line 71
01/01-1970 01:00
Avatar billede terrak Nybegynder
15. september 2004 - 07:18 #15
Som den skriver, så fodrer du mktime() med negative værdier, hvilket ikke understøttes af windows. Så fejlen ligger så vidt jeg kan se, ikke den kode jeg kom med.

Men hvis vi skal have det rettet, må du lige fortælle hvad feltet time skal indeholde? Brugerens onlinetid? Kom evt. med koden hvor du bruger mktime(), og der hvor du sætter variablerne, du bruger i mktime();
Avatar billede dsj Nybegynder
15. september 2004 - 09:50 #16
Nej, jeg bruger det ikke selv, men egentlig vil jeg også anbefale, at du foretager udregningen i din PHP-kode i stedet.
Avatar billede supermand69 Nybegynder
15. september 2004 - 13:44 #17
terrek > jeg får kun den fejl hvis jeg smider din kode ind?
Avatar billede terrak Nybegynder
15. september 2004 - 17:18 #18
Det har du godt nok sagt én gang, og derfor ville jeg gerne se din kode for at kunne rette en evt. fejl, men da dét lader til ikke interesserer dig, kan jeg vel kun tilbyde en PHP løsning:

<?php

function age($bday,$bmonth,$byear) {

$nday = date("j");
$nmonth = date("n");
$nyear = date("Y");
$age = $nyear-$byear;


if ($nmonth <= $bmonth) {

if ($nmonth == $bmonth) {

if ($nday > $bday) {
$age--;
}

} else {
$age--;
}

}

return $age;

}

?>

Du kalder så funktionen ved evt. at skrive echo age(6,8,1987);
(brug ikke age(06,08,1987) - det kan give problemer)

Det kan sikkert koges ned, men i det her eksempel er det til at gennemskue, hvad der sker.
Avatar billede supermand69 Nybegynder
15. september 2004 - 17:39 #19
$sql = "SELECT name, time, sex, zip, area, pic, FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birth)), '%Y')+0 AS age
    FROM $DB.user
    WHERE id=$value";
Avatar billede terrak Nybegynder
15. september 2004 - 18:05 #20
Du mangler jo 'DATE_FORMAT('-delen:

SELECT name, time, sex, zip, area, pic, DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birth)), '%Y')+0 AS age
    FROM $DB.user
Avatar billede supermand69 Nybegynder
15. september 2004 - 18:11 #21
shit!! :)

ja så var det nok derfor :p

tak for hjælpen
Avatar billede terrak Nybegynder
15. september 2004 - 18:14 #22
;)
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