Avatar billede mpj_86 Nybegynder
21. januar 2003 - 19:36 Der er 17 kommentarer og
1 løsning

Regne gemensnittet ud?

Hej
Jeg har lavet en lille vote fra 1-5 (det er i et tagwall) men hvordan gør jeg så den regner gemensnittet ud og skriver det på siden?

<?PHP
$limit=intval($limit); // Sørger for at limit kun kan være tal
if(!$limit) $limit=15; // Hvis limit var tom eller ikke var et tal, sætter vi den til 15
$foresp = mysql_query("SELECT navn, mail, dato, besked, vote FROM tagwall ORDER BY nr DESC LIMIT $limit") or die ("Fejl X: ".mysql_error());
while($row = mysql_fetch_array($foresp)) {
    $stjerner='';
    // Her tæller vi op til og med antallet af stemmer
    for($i=0;$i<$row['vote'];$i++)
    {
        $stjerner.='<IMG src="stjerne_on.gif">';
    }
    $i++;
    // Her udfylder vi resten af pladserne, til og med 5
    for($i=$i;$i<=5;$i++)
    {
        $stjerner.='<IMG src="stjerne_off.gif">';
    }
    $msg = $row["besked"];
    echo '<table border="0" width="744" style="border: 1px solid #000000;" align="center" cellspacing="0" cellpadding="0">';
    echo '<tr><td bgcolor="#80BCFF" style="border-bottom: 1px solid #000000;"><div style="float:left;">'.$stjerner.'</div><div style="float:right;"><a href="mailto:'.$row['mail'].'">'.$row['navn'].'</a>|'.$row['dato'].'</div>';
    echo "</td></tr><tr><td colspan='2' bgcolor='#B9E1FD'>";
    echo nl2br($msg);
    echo "</td></tr>";
    echo '</table><br>';
}
?>

Skriv lige hvis i skal bruge mere af koden.
Avatar billede caturn Nybegynder
21. januar 2003 - 19:47 #1
Gennemsnit udregnes sådan her:

De tal du vil have gennemsnittet af lægger du sammen og dividere med antallet af af tal.

Alt hvis du har tallene 3, 5, 8 skal du regne det sådan ud:

3+5+8 = 16
16/3 = 5.333333
Avatar billede mpj_86 Nybegynder
21. januar 2003 - 19:49 #2
ja men det skal være i php koder
Avatar billede Slettet bruger
21. januar 2003 - 20:10 #3
Det er det jo også nærmest...
Avatar billede dennism Nybegynder
21. januar 2003 - 20:14 #4
Noget ala dette:
$foresp = mysql_query("SELECT vote FROM tagwall");
$vote_antal = mysql_num_rows($foresp);
$antal = 0;
while ($foresp) {
$antal++
}

$resultat = $antal / $vote_antal;

echo"$resultat";
Avatar billede dennism Nybegynder
21. januar 2003 - 20:15 #5
Ups... Glemt det!.. Det var en tanke torsk!...
Avatar billede dennism Nybegynder
21. januar 2003 - 20:17 #6
Men noget ala dette burde virke:
$foresp = mysql_query("SELECT vote FROM tagwall");
$vote_antal = mysql_num_rows($foresp);
$antal = 0;
while ($row = mysql_fetch_array($foresp)) {
$antal = $antal + $row[antal];
}

$resultat = $antal / $vote_antal;

echo"$resultat";
Avatar billede dennism Nybegynder
21. januar 2003 - 20:18 #7
$antal = $antal + $row[antal];

skal være:

$antal = $antal + $row[vote];
Avatar billede jakoba Nybegynder
21. januar 2003 - 20:20 #8
du kan lave en 'kumulativ gennemsnits beregner' med:

<?php

$antal_der_har_stemt =    // heltal du gemmer
$nuverende_gennemsnit =  // meget præcist floatingpoint tal du gemmer

if( isset( $ny_stemme ) ) { // nogen har stemt 1..5
    $antal_der_har_stemt += 1;
    $nuverende_gennemsnit += ( ( 1.0 * $ny_stemme ) / $antal_der_har_stemt );
    echo number_format( $nuverende_gennemsnit, 2 );
}

// husk at gemme de nye værdier i $antal_der_har_stemt og $nuverende_gennemsnit

?>

mvh JakobA
Avatar billede mpj_86 Nybegynder
21. januar 2003 - 20:23 #9
kan du ikke prøve at skrive det ind i det hele?
for jeg er ikke så god til det :(
Avatar billede jakoba Nybegynder
21. januar 2003 - 20:24 #10
Ups. det var ikke ordentlig tænkt. Duer ikke.

<?php

$antal_der_har_stemt =    // heltal du gemmer
$nuverende_gennemsnit =  // meget præcist floatingpoint tal du gemmer

if( isset( $ny_stemme ) ) { // nogen har stemt 1..5
    $temp = round( $nuverende_gennemsnit * $antal_der_har_stemt ) +$ny_stemme;
    $antal_der_har_stemt  += 1;
    $nuverende_gennemsnit = ( ( 1.0 * $temp ) / $antal_der_har_stemt );
    echo number_format( $nuverende_gennemsnit, 2 );
}

// husk at gemme de nye værdier i $antal_der_har_stemt og $nuverende_gennemsnit

?>
Avatar billede mpj_86 Nybegynder
21. januar 2003 - 20:31 #11
Jakoba vis du indsætter det i min kode og det dur er de 120 points dine :)
Avatar billede jakoba Nybegynder
21. januar 2003 - 20:42 #12
mpj_86 >> hvis du sætter dig ind i din kode og forstår den godt nok til at indsætte det selv er en hel masse viden din :-))
  (fx med hjælp fra hyppige opslag i http://dk.php.net/manual/en/ )
Avatar billede dennism Nybegynder
21. januar 2003 - 20:49 #13
mpj_86 >>

Du lærer intet ved bare at lade os indsætte det... Forsøg selv, og spørg om til råds! Det er den eneste vej frem!
Avatar billede caturn Nybegynder
21. januar 2003 - 20:57 #14
Eksempel:

<?
$var = $stem[0] + $stem[1] + $stem[2];
$gennemsnit = $var / count($stem);
?>
Avatar billede mpj_86 Nybegynder
21. januar 2003 - 21:19 #15
jeg forstår ikke lige hvad jeg skal skrive under:

$antal_der_har_stemt
$nuverende_gennemsnit
Avatar billede max_max Nybegynder
23. januar 2003 - 08:29 #16
I stedet for at lave komplicerede udregninger af gennemsnittet, synes jeg at det er lidt lettere at bruge php's egen gennemsnitsmekanisme. Denne funktion viser gennemsnittet med en decimal:

$beta = mysql_query("SELECT AVG(karakter) AS grade FROM table ORDER BY nr DESC LIMIT $limit") or die(mysql_error());
list($grade) = mysql_fetch_row($beta);
$grade = round($grade, 1);

Denne funktion skal indsættes inden i din while-løkke.
echo "$grade";
Avatar billede alrua Nybegynder
23. januar 2003 - 18:23 #17
erm...det må så være _mysqls_ egen gennemsnit? :D

Btw jakoba - hvis du alligevel gemmer to varible, hvorfor så ikke bare gemme antal stemt og total sum af votes - så kan man bare lægge til de to og dividere? :D

Og jeg må give de andre ret, mpj - læs manualen, et par tutorials, etc og lær at forstå din kode...det hjælper ;)

-Alrua
Avatar billede mpj_86 Nybegynder
23. januar 2003 - 23:48 #18
tak for hjælpen det dur :)
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