Avatar billede TumseMM Nybegynder
22. oktober 2011 - 00:09 Der er 6 kommentarer og
1 løsning

Rangliste - den udskriver kun én enkelt brugers gennesnitsrating

Hey eksperter! :)

Ville gerne lave en rangliste på min side. En top 10, hvor de 10 brugere med bedst gennemsnitsrating kom på.

Har denne kode, men den echoer kun én bruger af gangen?


<?php

    $res_avg = mysql_query("SELECT AVG(rating) as avg_rating FROM ratings WHERE username = '".$username."' ORDER BY '".$average_rating."'");
    $row_avg = mysql_fetch_array($res_avg);
    $average_rating = $row_avg['avg_rating'];
   
echo"$username = $average_rating";
?>


Sætter pris på alt hjælp :)
Avatar billede danco Nybegynder
22. oktober 2011 - 01:19 #1
Jeg ville nok lave en foreslå dig at du laver en forespørgsel der returnerer de 10 bruger ID'er der er tale om, eller evt joiner den med din user tabel for at returnere brugernavne.
Har du et tabel dump med test data, ellers er det svært at sætte en SQL streng sammen.
22. oktober 2011 - 07:38 #2
Prøv med dette her:

$res_avg = mysql_query("SELECT bruger, AVG(rating) avg_rating FROM tumse GROUP BY bruger ORDER BY avg_rating DESC LIMIT 10 ");
while($row_avg = mysql_fetch_array($res_avg)) echo $row_avg['username']." = " . $row_avg['avg_rating']);
22. oktober 2011 - 07:46 #3
Den kom afsted før jeg fik indført mine kommentarer.  Her kommer de:

Hvis du vil have dine 10 bedste brugere, så skal du ikke søge på en bestemt bruger, $username.

Og så for at få ikke bare gennemsnittet af alle brugere men gennemsnit per bruger skal du søge på bruger og gennemsnit grupperet per bruger således:

SELECT user, AVG(rating) GROUP BY user

og hvis du vil have de højeste gennemsnit skal du ordne descending, altså ORDER BY avg_rating DESC.

Det leder så til min foreslåede kode.  Jeg håber den vil være dig til nytte.
22. oktober 2011 - 07:52 #4
Og så skulle jeg måske have sovet en time længere.  For at teste min foreslåede løsning havde jeg lavet en tabel med navnet tumsemm og med mine egne kolonnenavne, og jeg fik blandet det sammen med din query.  Her er den query der skulle passe med de data jeg kan se du har:

$res_avg = mysql_query("SELECT username, AVG(rating) as avg_rating FROM ratings GROUP BY username ORDER BY avg_rating DESC LIMIT 10 ");
while($row_avg = mysql_fetch_array($res_avg) echo $row_avg['username']." = " . $row_avg['avg_rating']. "<br>";
Avatar billede TumseMM Nybegynder
22. oktober 2011 - 11:21 #5
genialt Christian_Belgien :)

Du manglede dog lige en ekstra parentes efter din while løkke :)
Avatar billede majbom Novice
22. oktober 2011 - 21:16 #6
var det ikke det vi kom frem til i din forrige tråd om det samme?
Avatar billede TumseMM Nybegynder
23. oktober 2011 - 13:34 #7
nej nej, her tager den jo alle brugerne, og laver en rangliste :)
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