Avatar billede BTEngineer Novice
11. august 2006 - 14:22 Der er 12 kommentarer og
1 løsning

Gennemsnit af stemmer

Hey.

Jeg er ved at lave et rate-system til mit spil-system..
Har lavet det sådan at man har mulighed for at vælge mellem at give 1 - 5 points. Når man har valgt det og trykker "RATE!", så bliver man sendt videre til siden hvor stemmen skal registeres.

Mit problem er, at jeg ikke ved hvordan jeg skal ligge stemmerne sammen, ved ikke hvordan jeg skal finde gennemsnittet af de samlede stemmer.

Har oprettet et felt i min 'spil' database, som hedder 'points', der skal gennemsnitet for det rated spil ligge, f.eks. 3,5.
Har også oprettet en ny database, som indeholder 5 felter, 'ID, spilnavn, dato, ip, point'. Det vil sige at hver gang en bruger stemmer, så bliver brugerens point, ip osv. smidt ind i databasen, og derefter findes gennemsnittet af de nuværende points + brugerens point til det enkelte spil.

Mit script:
$hent = mysql_query("SELECT * FROM spil WHERE ID = '$_POST[id]'") or die(mysql_error());
$vis = mysql_fetch_array($hent);

if(mysql_num_rows($hent) == "0") {
    echo "Der skete en fejl, ID'ET eksistere ikke.";
}

$ip = $_SERVER['REMOTE_ADDR'];

$hent_vote = mysql_query("SELECT id,ip FROM spil_vote WHERE ip = '$ip' AND ID = '$vis[ID]'") or die(mysql_error());
$vise = mysql_fetch_array($hent_vote);

if($vise[ip] == "$ip") {
    echo "Din stemme er allerede registeret.";
}

$hent_from_vote = mysql_query("SELECT * FROM spil_vote") or die(mysql_error());
$show = mysql_fetch_array($hent_from_vote);

$user_point = $_GET[vote];
$point         = $vis[points];
$spilnavn     = $vis[navn];
$dato        = date('d/m-Y');

// så gik jeg lidt i stå..

Håber på noget hjælp :-).

// Henrik
Avatar billede gizmo-gizmo Nybegynder
11. august 2006 - 14:45 #1
Hvad med noget a la:

$q = mysql_query("SELECT SUM(point) AS samlet, COUNT(id) AS antal FROM spil_vote WHERE id='12345'");
$r = mysql_fetch_assoc($q);
$gennemsnit = $r['samlet'] / $r['antal'];

echo "gennemsnit: " . round($gennemsnit, 1);
Avatar billede gizmo-gizmo Nybegynder
11. august 2006 - 14:50 #2
eller bare:

$q = mysql_query("SELECT (SUM(id)/COUNT(id)) AS gennemsnit FROM spil_vote");
$r = mysql_fetch_assoc($q);

echo round($r['gennemsnit'], 2);

:-)
Avatar billede BTEngineer Novice
11. august 2006 - 16:56 #3
Undskyld, men fatter ikke noget af koden, ikke rigtig.
Hverken den første eller den sidste, kan du forklare dem lidt :-) ?
Avatar billede gizmo-gizmo Nybegynder
11. august 2006 - 17:19 #4
Hvis jeg forstår det ret, så opretter du en ny post i tabellen spil_vote hver gang en en bruger giver et spil en bedømmelse mellem 1 og 5 points.

Altså du gemmer det sådan her:
id | spilnavn | dato | ip | point
(en masse rækker)

Og hvis du så gerne vil finde gennemsnittet af de afgivede points til et bestemt spil, så kan du sige:

$q = mysql_query("SELECT (SUM(point)/COUNT(id)) AS gennemsnit FROM spil_vote WHERE spil='spillets navn'");
$r = mysql_fetch_array($q);
echo $r['gennemsnit'];

Fordi at gennemsnittet er alle points lagt sammen (SUM(point)) divideret med antal afgivne karakterer (COUNT(id))
Avatar billede jakobdo Ekspert
11. august 2006 - 20:42 #5
Hvad med:
echo mysql_result(mysql_query("SELECT AVG(point) AS gennemsnit FROM spil_vote WHERE spil='spillets navn'"),0);

Har bare brugt funktionen: AVG()
Avatar billede gizmo-gizmo Nybegynder
11. august 2006 - 21:04 #6
Ha, man lærer hver dag :-) tak jakobdo.
Avatar billede BTEngineer Novice
11. august 2006 - 21:42 #7
Nu har jeg det sådan, at får jeg udleveret nogle koder her på eksperten, så vil jeg gerne vide hvad de betyder, ellers lærer man jo ikke noget af det :-).
Forstår ikke hvad mysql_result() gør, AS, og ,0, AVG betyder vel average, dvs. gennemsnit?
Avatar billede jakobdo Ekspert
11. august 2006 - 22:38 #8
http://dk.php.net/mysql_result
http://www.w3schools.com/sql/func_avg.asp
AS bruges for at gemme noget som et andet navn.
F:eks. SELECT id AS brugernavn FROM
betyder id nu hedder brugernavn når jeg trækker det ud af row:
$row['brugernavn']
Avatar billede BTEngineer Novice
12. august 2006 - 12:56 #9
jakobdo->
okay, det er jeg helt med på :-)
Men kan du ikke forklare mig, hvad mysql_result gør, forstår ikke rigtig forklaringen .. tænkte også på om det kunne lade sig gøre at lave gennemsnittet til 2 decimaler.
Avatar billede gizmo-gizmo Nybegynder
12. august 2006 - 13:05 #10
mysql_result tager to parametre: det første selve resultatet fra mysql_query() og det andet parameter et tal alt efter hvilken kolonne man vil have ud (0 er den første her). Det svarer i virkeligheden lidt til følgende:
$q = mysql_query("SELECT something FROM something);
$r = mysql_fetch_array($q);
echo $r[0];

Det andet er bare noget kortere.

Vil du have 2 decimaler kan du sige:
$q = mysql_query("SELECT ROUND(AVG(point), 2) FROM spil_vote WHERE spil='spillets navn'");
$gennemsnit = mysql_result($q, 0);
Avatar billede BTEngineer Novice
12. august 2006 - 15:24 #11
Okay, tak gizmo-gizmo :-).
Men, forstår stadig ikke hvordan der skal være et 0.
Altså mysql_result($q, 0);
Avatar billede gizmo-gizmo Nybegynder
12. august 2006 - 15:34 #12
Ups, det var også mig der kagede i det.

0 fordi det er den første række fra resultatet.

Bruger man mysql_result($q, 0) tager det den første kolonne i den første række. mysql_result($q, 1) tager den anden række osv.
Avatar billede BTEngineer Novice
14. august 2006 - 18:14 #13
Okay, tak :-).
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