Avatar billede madsens90 Praktikant
04. januar 2010 - 17:49 Der er 14 kommentarer og
1 løsning

Select fra MySQL hvor der er bedst rated spil. Sorter efter rate?

Hey eksperter!

Har lavet en spille hjemmeside med Flash, hvorpå man på forsiden skal kunne se de spil der er bedst rated!

Men er gået lidt i stå her hvor jeg skal lave en SELECT fra min MySQL, hvori den skal finde de bedst ratede spil.

Tabellen i min MySQL ser sådan ud:

(med 2 rækker indsat)

id | name_id |game_id |tid | rate
_________________________________
1      1        4    12/12  9
_________________________________
2      6        2    12/12  4

Der er der så blevet rated at spil 4 får 9 ud af 10 af spiller 1, og spil 2 får 4 ud af 10 af spiller 6.

Håber nogle har et forslag!
Avatar billede htx98i17 Professor
04. januar 2010 - 18:17 #1
prøv denne

SELECT SUM(rate),* FROM tabel GROUP BY game_id ORDER BY rate DESC LIMIT 10

jeg kan faktisk ikke lige huske om det er group by som kommer efter order by, jeg er lidt rusten :)
Avatar billede madsens90 Praktikant
04. januar 2010 - 18:18 #2
Kender slet ikke til GROUP BY, så må lige læse om det.

Har ellers lavet en del SELECTS, men det er bare lige det med at sætte dem sammen. :D
Avatar billede madsens90 Praktikant
04. januar 2010 - 18:21 #3
Jeg får bare:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* FROM flashmaster_votes ORDER BY `rate` GROUP BY `game_id` DESC LIMIT 8' at line 1

Sådan ser det ud:

$query = mysql_query("SELECT SUM(rate),* FROM flashmaster_votes ORDER BY `rate` GROUP BY `game_id` DESC LIMIT 8") or die(mysql_error());
  while($row3 = @mysql_fetch_assoc($query))
  {
Avatar billede htx98i17 Professor
04. januar 2010 - 18:25 #4
$query = mysql_query("SELECT SUM(rate),* FROM flashmaster_votes GROUP BY `game_id` ORDER BY `rate` DESC LIMIT 8") or die(mysql_error());
Avatar billede madsens90 Praktikant
04. januar 2010 - 18:27 #5
Beklager, det havde jeg allerede prøvet. Havde glemt at skrive det. sry!

Andre idéer ?
Avatar billede htx98i17 Professor
04. januar 2010 - 18:28 #6
det er sådan man gør det. hvis ikke det virker skal du komme med en fejlmeddelelse
Avatar billede madsens90 Praktikant
04. januar 2010 - 18:28 #7
Har forresten også tjekket at navnene på kolonnerne i tabellen er skrevet korrekt. Så det er heller ikke fejlen.
Avatar billede madsens90 Praktikant
04. januar 2010 - 18:29 #8
Den eneste fejlmeddelelse jeg får er denne:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* FROM flashmaster_votes ORDER BY `rate` GROUP BY `game_id` DESC LIMIT 8' at line 1
Avatar billede htx98i17 Professor
04. januar 2010 - 18:33 #9
det er også rigeligt. Du har ikke lavet sql'en som jeg har skrevet den. Det kan man se i fejlmeddelelsen :) rækkefølgen skal være korrekt.
Avatar billede madsens90 Praktikant
04. januar 2010 - 18:33 #10
Fandt fejlen!

Some technical rules of GROUP BY:

•The column that you GROUP BY must also be in your SELECT statement.

Såh løste det med dette:

$query = mysql_query("SELECT SUM(rate),`game_id` FROM flashmaster_votes GROUP BY `game_id` ORDER BY `rate` DESC LIMIT 8") or die(mysql_error());

Tak for hjælpen! ;)

Kom med et svar. :D

Kan først se det endelige resultat når der er kommet mange flere votes, men det ser ud til at virke. ;)
Avatar billede htx98i17 Professor
04. januar 2010 - 18:35 #11
ja, i den fik du også styr på rækkefølgen :)
Avatar billede madsens90 Praktikant
04. januar 2010 - 18:41 #12
Har testet, og rækkefølgen var for mig ligemeget.

Problemet var blot at jeg skal skulle huske `game_id` i min SELECT for at kunne bruge den i GROUP BY. Det er åbenbart noget man SKAL. :S

Men tak! :)
Avatar billede acore Ekspert
04. januar 2010 - 19:29 #13
Om ikke andet så man ved hvilket spil, der scorede godt ;)

Det kan dog ikke give det rigtige resultat, når du bruger SUM. Hvis 100 spillere har givet en spil karakteren 1, så vinder det over et andet spil, som 9 spillere har givet karakteren 10.

Derfor: Skift SUM ud med AVG. Så bruger du gennemsnittet
Avatar billede htx98i17 Professor
04. januar 2010 - 20:10 #14
godt set acore :-)
Avatar billede madsens90 Praktikant
04. januar 2010 - 20:18 #15
Jeg takker mange gange. :D

Sad selv også lige og tænkte over hvordan det kunne løses, og du er jo så kommet med svaret. :D
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