Avatar billede sevinding Juniormester
27. marts 2011 - 13:49 Der er 9 kommentarer og
2 løsninger

udregning af alder

Hej.
Jeg har dette lille script der fortæller mig hvem der har fødselsdag idag.

<?php


$q = mysql_query("SELECT id, name, logo, flags, DATE_FORMAT(born, '%d') AS dato, DATE_FORMAT(born, '%m') AS maaned, DATE_FORMAT(born, '%Y') AS aar FROM turen WHERE MONTH(born) = '".date('n')."' AND DAYOFMONTH(born) = '".date('j')."' ORDER BY name ASC") or die(mysql_error());while($vis = mysql_fetch_array($q)){
$id = $vis["id"];
$name = $vis["name"];
$flags = $vis["flags"];
$dato = $vis["born"]; 
$logo = $vis["logo"];

$maaned = $vis["maaned"];
$aar = $vis["aar"];
$alder = date("Y") - $aar;
if( mktime(0, 0, 0, $maaned,
$dato, date("Y")) < time() )   
$alder = $alder - 0;



            echo "<table width='225' border='0' cellspacing='0' cellpadding='1'><tr>";
            echo "<td align='left' align='center' valign='bottom' width='15'><img src=$flags width='15' height='10' border=0></td>";
            echo "<td width='200' align='left' valign='bottom'><img src=$logo width='15' height='20' border=0> <a href=http://www.tourfacts.dk/profilryttere.php?id=$id class='link2'>".$name."</a><br></td>";
            echo "</tr></table>";

}


?>
Problemet er bare, at hvis jeg vil udskrive alder, viser den hvor gamle de ville være i dag. Det duer jo ikke, da nogle er døde.
I min tabel har jeg har jeg felterne: born og died i dateformat.
Skulle der mon være en  eller anden, der kan vise mig hvordan jeg finder alderen, også på de der er døde.
27. marts 2011 - 16:34 #1
Hvad vil du vise som alder paa en afdoed? Vil du vise alderen paa doedsdagen?  Eftersom det er en stoerrelse der aldrig aendrer sig er det nemmeste maaske at lave et felt 'doedsalder' i tabellen og fylde det ud manuelt samtidig med at du udfylder doedsdato.  Saa er du fri for at skulle beregne det hver gang du beregner alderen af de levende personer. 

$q udvides saa med "SELECT ......, doesdag, ... FROM turen WHERE MONTH(born) = ..."

og saa

$doedsalder = $vis['doedsalder'];
if($doedsalder)
{
    $alder = $doedsalder;
}
else
{
  $alder = date("Y") - $aar;
  o.s.v.
}
Avatar billede sevinding Juniormester
27. marts 2011 - 17:49 #2
Det var sådan set det jeg håbede på at undgå.
Jeg har et script der udregner det jeg gerne vil have:

$q = mysql_query("SELECT *, (YEAR(died) - YEAR(born)) - (RIGHT(died, 5)<RIGHT(born, 5)) as alder, DATE_FORMAT(born, '%d-%m-%Y') AS ny_dato FROM turen WHERE id=$id") or die(mysql_error());
$r = mysql_fetch_array($q);
                       
echo $r['alder'] . " years old";
                           
} else {
                       
$q = mysql_query("SELECT *, (YEAR(CURDATE()) - YEAR(born)) - (RIGHT(CURDATE(), 5)<RIGHT(born, 5)) as alder, DATE_FORMAT(born, '%d-%m-%Y') AS ny_dato FROM turen WHERE id=$id") or die(mysql_error());
$r = mysql_fetch_array($q);

echo $r['alder'] . " years old";

}

men det fortæller ikke hvem der har fødselsdag idag.
Kan man evt. udvide det til formålet?
27. marts 2011 - 19:30 #3
Scriptet i dit oprindelige spoergsmaal giver dig alle personer med foedselsdag idag, inklusiv de afdoede (med mindre du flytter afdoede personer til en anden tabel end turen.)  I foerste del af scriptet i #2 soeger du efter alder paa personer med feltet died fyldt ud.  Saa det maa vel vaere et spoergsmaal om at kombinere de to. 

Enten kan du i scriptet #2 erstatte "..WHERE id = $id.." med "..WHERE MONTH(born) = '".date('n')."' AND DAYOFMONTH(born) = '".date('j')."

Eller du kan udvide scriptet i dit oprindelige spoergsmaal med

"SELECT id, name, logo, ...[o.s.v.].. (YEAR(died) - YEAR(born)) - (RIGHT(died, 5)<RIGHT(born, 5)) as alder.."

og saa

$id = $vis['id'];
$name = $vis['name'];
...
$doedsalder = $vis['doedsalder'];
if($doedsalder)
{
    $alder = $doedsalder;
}
else
{
  $alder = date("Y") - $aar;
  o.s.v.
}
Avatar billede showsource Seniormester
27. marts 2011 - 20:31 #4
Her finder den alder, evt. "død", og evt. fødselsdag:


$sql = "SELECT IF(dead IS NOT NULL,(YEAR(dead)-YEAR(birth))-(RIGHT(dead, 5)<RIGHT(birth, 5)),(YEAR(CURDATE())-YEAR(birth))-(RIGHT(CURDATE(), 5)<RIGHT(birth, 5))) as alder,
        IF(dead IS NULL,DATE_FORMAT(birth,'%m-%d'),NULL) as birthday,
        DATE_FORMAT(CURDATE(),'%m-%d') as today
        FROM alder";
$rows = mysql_query($sql) or die (mysql_error());

while($v = mysql_fetch_object($rows)) {
echo $v->alder." ".(empty($v->birthday) ? "Død" : "år".($v->birthday == $v->today ? " Tillykke med dagen!" : ""))."<br />";
}


feltet "birth" indeholder fødselsdato,
og feltet "dead" har dødsdato eller NULL
27. marts 2011 - 21:22 #5
Fikst.

(Du siger "SELECT ...... FROM alder".  Saa du har en tabel alder med, mindst, felterne dead og birth.  Det var jeg ikke klar over.)

Saa er det en loesning der virker tilfredsstillende?  I saa fald, forventer du mere fra mig, eller kan spoergsmaalet lukkes nu hvor der er en loesning?  Det er din afgoerelse om du vil lukke med points til mig eller om du selv vil oprette et svar og acceptere det.
Avatar billede showsource Seniormester
28. marts 2011 - 00:31 #6
Nu var det ikke mig som stillede spm., så det er ex. på min tabel.
Men ellers:

$sql = "SELECT IF(died IS NOT NULL,(YEAR(died)-YEAR(born))-(RIGHT(died, 5)<RIGHT(born, 5)),(YEAR(CURDATE())-YEAR(born))-(RIGHT(CURDATE(), 5)<RIGHT(born, 5))) as alder,
        IF(died IS NULL,DATE_FORMAT(born,'%m-%d'),NULL) as birthday,
        DATE_FORMAT(CURDATE(),'%m-%d') as today
        FROM turen";
28. marts 2011 - 04:27 #7
showsource, undskyld, jeg saa mig ikke for, jeg antog at det var fra spoergeren.
Avatar billede sevinding Juniormester
28. marts 2011 - 07:09 #8
Tak til jer begge to. Nu fik jeg noget at arbejde med, så jeg kan lege mig lidt frem til en løsning.
Vil i begge sende et svar, så jeg kan dele pointene mellem jer?
28. marts 2011 - 08:48 #9
Jeg oprettede allerede et svar #1, men her goer jeg det igen.
Avatar billede showsource Seniormester
28. marts 2011 - 10:46 #10
Og et svar her.
Og Christian_Belgien, du er bestemt ikke den første til at overse noget i et spm./kommentar :O)

Og b.t.w. må det vel være bedre at bruge

$idag = date("m-d");

før while(), i stedet for at lade mysql hente den var for hvert row
Avatar billede showsource Seniormester
28. marts 2011 - 10:59 #11
øhh, altså erstatte "today" med $idag :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