Avatar billede sevinding Juniormester
07. februar 2012 - 11:34 Der er 15 kommentarer og
1 løsning

udregne gennemsnitsalder

Jeg har nedenstående, der udskriver ryttere og deres alder.
Jeg har rodet for at udregne deres gennemsnitsalder, uden held:

MIN(aa.year) AS year,
aa.hold AS hold,
aa.nummer AS nummer,
aa.navn AS navn,
aa.start AS staart,
ryt.flags AS flags,
ryt.id AS rytterid,
ryt.name AS ryttername,
ryt.country AS country,
ryt.logo AS logo,
ryt.born AS born,
te.id AS teamid,
te.deltaget AS deltaget,
te.name AS teamname,

DATEDIFF(aa.start, ryt.born) as alder

        FROM alleaar AS aa
        INNER JOIN ryttere AS ryt ON aa.navn = ryt.id
        INNER JOIN teams AS te ON aa.hold = te.id

WHERE aa.year=$aar AND aa.navn = ryt.id AND te.id=$hold

GROUP BY
    ryt.name HAVING year = $aar

ORDER BY aa.nummer ASC

");

while($r = mysql_fetch_array($res))

{
$antaldage = $r['alder'];
$beregn = floor($antaldage/365);
$antaldage = $beregn ." Years  " . ($antaldage - ($beregn*365)) . " Days";

        echo "<table width='630' border='0' cellspacing='0' cellpadding='0'><tr><td  style='border-top:ridge 1px #FFFF80;'>";
          echo "<table width='630' border='0' cellspacing='1' cellpadding='1'><tr>";
        echo "<td width='30' align='right' valign='bottom'>$r[nummer].</td>";
        echo "<td width='25' align='center' valign='bottom'><img src=$r[flags] width='15' height='15' border=0></td>";
        echo "<td width='200' align='left' valign='bottom'><img src=$r[logo] width='15' height='20' border=0>  <a href=http://www.tourfacts.dk/root/tour_de_france_riders.php?id=$r[rytterid] class='link2' target='_self'>$r[ryttername]</a></td>";
        echo "<td width='140' align='left' valign='bottom'>$antaldage</td>";
        echo "<td width='125' align='left' valign='bottom'>$r[country]</td>";
        echo "<td width='55' align='left' valign='bottom'><em><font color='#FF0000'>";

$out = mysql_query("SELECT * FROM out WHERE year = $aar AND name = $r[rytterid]");
while($o = mysql_fetch_array($out)) { echo "Stage: $o[etape]"; }

        echo"</font></em></td>";
      echo "</tr></table>";
        echo "</td></tr></table>";   

}

$number = 0;

Skulle der mon være en løsning på dette?
Avatar billede jakobdo Ekspert
07. februar 2012 - 11:40 #1
Gennemsnitsalder på et hold eller på alle ryttere i din db ?
Avatar billede sevinding Juniormester
07. februar 2012 - 11:46 #2
Gennemsnitsalderen på holdet. Derfra regner jeg med at jeg kan lure hvordan jeg kan gå videre til at bruge det i andre sammenhænge.
Avatar billede jakobdo Ekspert
07. februar 2012 - 11:57 #3
Kan du ikke "bare" lave:

SELECT AVG(alder) FROM ryttere GROUP BY hold_id
Avatar billede sevinding Juniormester
07. februar 2012 - 12:16 #4
Kan ikke lige lure hvor jeg skal sætte det ind.
Avatar billede jakobdo Ekspert
07. februar 2012 - 12:22 #5
Kan du ikke teste sql'en direkte i phpmyadmin til at starte med?
Nu kender jeg ikke din tabel-struktur, så...
Men det er rent gæt at den kunne være noget i stil med det jeg sendte i #3
Avatar billede sevinding Juniormester
07. februar 2012 - 13:51 #6
Har prøvet at bruge det på forskellige måder, og det eneste jeg får ud er eksempelvis: 16937226.078254
Avatar billede olebole Juniormester
07. februar 2012 - 17:42 #7
<ole>

Hvilket format har data i felterne aa.start og ryt.born?

/mvh
</bole>
Avatar billede sevinding Juniormester
07. februar 2012 - 18:49 #8
Begge felter er datofelter.
Jeg har tyndet ud i scriptet og håber på at kunne udskrive en gennemsnitsalder:
<?php

$res = mysql_query("SELECT

MIN(aa.year) AS year,
aa.hold AS hold,
aa.start AS start,
ryt.born AS born,
te.id AS teamid,

DATEDIFF(aa.start, ryt.born) as alder

        FROM alleaar AS aa
        INNER JOIN ryttere AS ryt
        INNER JOIN teams AS te

WHERE aa.year=$aar AND aa.hold = te.id AND te.id=$hold

GROUP BY te.id

");

while($r = mysql_fetch_array($res))

{
$antaldage = $r['alder'];
$beregn = floor($antaldage/365);
$antaldage = $beregn ." Years  " . ($antaldage - ($beregn*365)) . " Days";

echo "Average age: $antaldage.";

}

$number = 0;

?>
Som det ser ud nu får jeg dette resultat: -26 Years  209 Days
Avatar billede olebole Juniormester
07. februar 2012 - 19:46 #9
Jeg kan ikke rigtig få mening ud af din beregning, men det skyldes måske, at jeg ligesom jakobdo ikke ved, hvad der står i dine felter
Avatar billede chriz7913 Nybegynder
07. februar 2012 - 23:27 #10
Kan det ikke bare gøres sådan, hvis du sætter denne ind istedet for din while-løkke? :

$dage_ialt = 0;$ryttere_ialt = 0;

while($r = mysql_fetch_array($res))
{
$dage_ialt += $r['alder'];
$ryttere_ialt++;
}

$dage_gnsn = floor($dage_ialt / $ryttere_ialt);
$aar = floor($dage_gnsn / 365);
$dage = $dage_gnsn % 365;
$antaldage = $aar . " Years  " . $dage . " Days";

echo "Average age: $antaldage.";
Avatar billede sevinding Juniormester
08. februar 2012 - 05:36 #11
Hej chriz7913.
Tak for det. med lidt flere data i i mit script kom det til at virke. Nu ser det sådan her ud, men der bliver kun udskrevet fra det første script. Kan du se hvad der evt. måtte være galt?

  <legend>The <strong><?php echo "$teamname"; ?></strong> riders in <?php echo "$aar"; ?> | 

<?php

$res = mysql_query("SELECT

MIN(aa.year) AS year,
aa.hold AS hold,
aa.navn AS navn,
aa.start AS start,
ryt.id AS rytterid,
ryt.born AS born,
te.id AS teamid,

DATEDIFF(aa.start, ryt.born) as alder

        FROM alleaar AS aa
        INNER JOIN ryttere AS ryt
        INNER JOIN teams AS te

WHERE aa.year=$aar AND aa.hold = te.id AND aa.navn = ryt.id AND te.id=$hold

GROUP BY aa.hold

");

{
$dage_ialt = 0;$ryttere_ialt = 0;
while($r = mysql_fetch_array($res))
{
$dage_ialt += $r['alder'];$ryttere_ialt++;
}
$dage_gnsn = floor($dage_ialt / $ryttere_ialt);
$aar = floor($dage_gnsn / 365);
$dage = $dage_gnsn % 365;
$antaldage = $aar . " Years  " . $dage . " Days";echo "Average age: $antaldage.";

}


?>
</legend>
<br>

<?php

              echo "<table width='630' border='0' cellspacing='0' cellpadding='0'>";
            echo "<tr>";
            echo "<td width='90''><span class='headerblack'>   Nr:</span></td>";
            echo "<td width='180'><span class='headerblack'>Name:</span></td>";
            echo "<td width='140'><span class='headerblack'>Age:</span></td>";
            echo "<td width='110'><span class='headerblack'>From:</span></td>";
            echo "<td width='70'><span class='headerblack'><font color='#FF0000'>Abandonned?</font></span></td>";
            echo "</tr></table>";

$res = mysql_query("SELECT

MIN(aa.year) AS year,
aa.hold AS hold,
aa.nummer AS nummer,
aa.navn AS navn,
aa.start AS staart,
ryt.flags AS flags,
ryt.id AS rytterid,
ryt.name AS ryttername,
ryt.country AS country,
ryt.logo AS logo,
ryt.born AS born,
te.id AS teamid,
te.deltaget AS deltaget,
te.name AS teamname,

DATEDIFF(aa.start, ryt.born) as alder

        FROM alleaar AS aa
        INNER JOIN ryttere AS ryt ON aa.navn = ryt.id
        INNER JOIN teams AS te ON aa.hold = te.id

WHERE aa.year=$aar AND aa.navn = ryt.id AND te.id=$hold

GROUP BY
    ryt.name HAVING year = $aar

ORDER BY aa.nummer ASC

");

while($r = mysql_fetch_array($res))

{
$antaldage = $r['alder'];
$beregn = floor($antaldage/365);
$antaldage = $beregn ." Years  " . ($antaldage - ($beregn*365)) . " Days";

        echo "<table width='630' border='0' cellspacing='0' cellpadding='0'><tr><td  style='border-top:ridge 1px #FFFF80;'>";
      echo "<table width='630' border='0' cellspacing='1' cellpadding='1'><tr>";
    echo "<td width='30' align='right' valign='bottom'>$r[nummer].</td>";
        echo "<td width='25' align='center' valign='bottom'><img src=$r[flags] width='15' height='15' border=0></td>";
        echo "<td width='200' align='left' valign='bottom'><img src=$r[logo] width='15' height='20' border=0>  <a href=http://www.tourfacts.dk/root/tour_de_france_riders.php?id=$r[rytterid] class='link2' target='_self'>$r[ryttername]</a></td>";
        echo "<td width='140' align='left' valign='bottom'>$antaldage</td>";
        echo "<td width='125' align='left' valign='bottom'>$r[country]</td>";
        echo "<td width='55' align='left' valign='bottom'><em><font color='#FF0000'>";

$out = mysql_query("SELECT * FROM out WHERE year = $aar AND name = $r[rytterid]");
while($o = mysql_fetch_array($out)) { echo "Stage: $o[etape]"; }

        echo"</font></em></td>";
      echo "</tr></table>";
        echo "</td></tr></table>";   

}

$number = 0;

?>
Avatar billede chriz7913 Nybegynder
08. februar 2012 - 08:29 #12
Kan ikke lige forstå hvorfor du vil udskrive gennemsnits-alderen i hver række, når det er det samme tal.

Men hvis vi skal til at udskrive det imens while-løkken stadig kører, må vi lave det lidt om.

Prøv at erstatte den sidste while-løkke med dette: (ikke testet)
$dage_ialt = 0;$ryttere_ialt = 0;$html_c = "";

while($r = mysql_fetch_array($res))
{
$dage_ialt += $r['alder'];
$ryttere_ialt++;

$html_c .= "<table width='630' border='0' cellspacing='0' cellpadding='0'>
<tr>
<td  style='border-top:ridge 1px #FFFF80;'>
<table width='630' border='0' cellspacing='1' cellpadding='1'>
<tr>
<td width='30' align='right' valign='bottom'>".$r['nummer'].".</td>
<td width='25' align='center' valign='bottom'>
<img src='".$r['flags']."' width='15' height='15' border='0'>
</td>
<td width='200' align='left' valign='bottom'>
<img src='".$r['logo']."' width='15' height='20' border='0'>
<a href='http://www.tourfacts.dk/root/tour_de_france_riders.php?id=".$r['rytterid']."' class='link2' target='_self'>".$r['ryttername']."</a>
</td>
<td width='140' align='left' valign='bottom'>{gnsn_alder}</td>
<td width='125' align='left' valign='bottom'>".$r['country']."</td>
<td width='55' align='left' valign='bottom'>
<em>
<font color='#FF0000'>";

$out = mysql_query("SELECT * FROM out WHERE year = '".$aar."' AND name = '".$r[rytterid]."'");
while($o = mysql_fetch_array($out)) { $html_c .= "Stage: ".$o[etape]; }

$html_c .= "</font>
</em>
</td>
</tr>
</table>
</td>
</tr>
</table>";   
}

$dage_gnsn = floor($dage_ialt / $ryttere_ialt);
$aar = floor($dage_gnsn / 365);
$dage = $dage_gnsn % 365;
$antaldage = $aar . " Years  " . $dage . " Days";

echo str_replace("{gnsn_alder}",$antaldage,$html_c);


- Og husk lige at skrife (...) i linket, ud med root/tour_de_france_riders.php?id=".$r['rytterid']."'
Avatar billede sevinding Juniormester
08. februar 2012 - 08:43 #13
Jeg er ikke ude på at få gns. alderen ud i hver række.
Gns. alderen kommer her:

<?php

$res = mysql_query("SELECT

MIN(aa.year) AS year,
aa.hold AS hold,
aa.navn AS navn,
aa.start AS start,
ryt.id AS rytterid,
ryt.born AS born,
te.id AS teamid,

DATEDIFF(aa.start, ryt.born) as alder

        FROM alleaar AS aa
        INNER JOIN ryttere AS ryt
        INNER JOIN teams AS te

WHERE aa.year=$aar AND aa.hold = te.id AND aa.navn = ryt.id AND te.id=$hold

GROUP BY aa.hold

");

{
$dage_ialt = 0;$ryttere_ialt = 0;
while($r = mysql_fetch_array($res))
{
$dage_ialt += $r['alder'];$ryttere_ialt++;
}
$dage_gnsn = floor($dage_ialt / $ryttere_ialt);
$aar = floor($dage_gnsn / 365);
$dage = $dage_gnsn % 365;
$antaldage = $aar . " Years  " . $dage . " Days";echo "Average age: $antaldage.";

}


?>

og det næste skriver rytterne ud med dere alder.
Problemet er, at der kun bliver skrevet ud fra ovenstående script.
Prøv og se:
http://www.tourfacts.dk/by_year/yearly/teamriders.php?aar=2004&hold=113&name=US Postal-Berry Floor
og
http://www.tourfacts.dk/by_year/yearly/teamriders1.php?aar=2004&hold=113&name=US Postal-Berry Floor

Jeg vil gerne have de to udtræk på samme side.
Og så må du lige undskylde hvis jeg synes besværlig :-)
Avatar billede sevinding Juniormester
08. februar 2012 - 09:37 #14
Hej igen chriz7913.
Har lige løst mit lille problem. Skulle bare flytte rundt på de 2 scripts, og det kører som det skal.
Mange tak for hjælpen. Sender du et svar?
Avatar billede chriz7913 Nybegynder
08. februar 2012 - 09:47 #15
Godt at høre :)
Avatar billede sevinding Juniormester
08. februar 2012 - 09:50 #16
Hej igen chriz7913
Jeg var nok lige hurtig nok på aftrækkeren.
Det jeg trækker ud på:

<?php

$res = mysql_query("SELECT

MIN(aa.year) AS year,
aa.hold AS hold,
aa.navn AS navn,
aa.start AS start,
ryt.id AS rytterid,
ryt.born AS born,
te.id AS teamid,

DATEDIFF(aa.start, ryt.born) as alder

        FROM alleaar AS aa
        INNER JOIN ryttere AS ryt
        INNER JOIN teams AS te

WHERE aa.year=$aar AND aa.hold = te.id AND aa.navn = ryt.id AND te.id=$hold

GROUP BY aa.hold

");

{
$dage_ialt = 0;$ryttere_ialt = 0;
while($r = mysql_fetch_array($res))
{
$dage_ialt += $r['alder'];$ryttere_ialt++;
}
$dage_gnsn = floor($dage_ialt / $ryttere_ialt);
$aar = floor($dage_gnsn / 365);
$dage = $dage_gnsn % 365;
$antaldage = $aar . " Years  " . $dage . " Days";echo "Average age: $antaldage.";

}


?>

er blot en alder på en tilfældig rytter på holdet.
Men smid et svar alligevel, og jeg leger videre med det.
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