Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Sortowanie wedłu średniej ocen
xamrex
post
Post #1





Grupa: Zarejestrowani
Postów: 267
Pomógł: 1
Dołączył: 10.08.2007

Ostrzeżenie: (0%)
-----


Witam.
Posiadam w bazie tabele z ocenami gier.

Struktura
game_id user ocena
Przykładowe wpisy
1 test 5
1 test 3
2 test 2
3 test 5
3 test 1

Mój kod
  1. $wynik= mysql_query ("SELECT * FROM games_rate ");
  2. while ($rekord = mysql_fetch_array ($wynik)) {
  3. $id = $rekord[0];
  4.  
  5.  
  6. $srednia=mysql_query ("SELECT count(*) as numberrate,SUM(rate) as sumrate FROM games_rate WHERE game_id=$id ");
  7. while ($rekord2 = mysql_fetch_array ($srednia)) {
  8. $sredniawka= round($rekord2[1]/$rekord2[0] ,2);
  9.  
  10. echo "SREDNIA $sredniawka  ";
  11. }
  12.  
  13.  
  14.  
  15. echo "GRA $rekord[0]<br>";
  16. }


Jak wyświetlić gry posortowane według średnich?

Domyślam się, że jednym ze sposobów to wyświetlenie właśnie wszystkich gier wraz z średnimi, dodanie każdego wpisu do tabeli i sortowanie wg średniej, następnie wyświetlenie tego. Jednak nie potrafię tego napisać

Ten post edytował xamrex 6.06.2010, 22:53:53
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
xamrex
post
Post #2





Grupa: Zarejestrowani
Postów: 267
Pomógł: 1
Dołączył: 10.08.2007

Ostrzeżenie: (0%)
-----


Cytat
Nazwa tabeli games Pola jakie mam w bazie game_id, user_id, rate

oczywiście że mam.
Tylko NIE zawiera ona ŚREDNIEJ tylko ocenę
np gra o id 5
ma ocenie 3 i 5
(po prostu dwa wpisy)
średnia (3+5)/2=4

Napisałem takie coś
  1. $wynik= mysql_query ("SELECT * FROM games_rate ");
  2.  
  3. while ($rekord = mysql_fetch_array ($wynik)) {
  4. $id = $rekord[0];
  5.  
  6.  
  7. $srednia=mysql_query ("SELECT count(*) as numberrate,SUM(rate) as sumrate FROM games_rate WHERE game_id=$id ");
  8. while ($rekord2 = mysql_fetch_array ($srednia)) {
  9. $sredniawka= round($rekord2[1]/$rekord2[0] ,2);
  10.  
  11.  
  12.  
  13. $i++;
  14. $nr[$i] = $id;
  15. $avg[$i] = $sredniawka;
  16.  
  17. }
  18.  
  19. }
  20.  
  21.  
  22. for ($e=1; $e<20; $e++)
  23. {$razem[$e] = "srednia $avg[$e]  gra $nr[$e]<br>";}
  24.  
  25.  
  26. sort($razem);
  27. for ($c=0; $c<20; $c++)
  28. {echo $razem[$c];}

Wyjaśniam.
Tworzę tabele nr i avg (zawierającą numer gry pobrany z bazy i wyliczoną średnią)
Następnie łączę te tabele razem ze sobą i sortuje.

Możliwe że jest łatwiejszy sposób, jeśli tak to proszę o podpowiedź.
Napisałem pętle dla c,e <20 ponieważ mam tyle pozycji, w przyszłości ulepszę to by zliczał liczbę pozycji z bazy

Dodaję bazę, jeśli ktoś ma chęci bo rozwiązać to w inny sposób
  1. CREATE TABLE games_rate (
  2. game_id int(11) NOT NULL DEFAULT '0',
  3. user_id int(11) NOT NULL DEFAULT '0',
  4. rate int(11) NOT NULL DEFAULT '0',
  5. PRIMARY KEY (game_id,user_id)
  6. ) ;
  7.  
  8.  
  9. INSERT INTO games_rate VALUES (280, 2, 3);
  10. INSERT INTO games_rate VALUES (17, 457, 4);
  11. INSERT INTO games_rate VALUES (280, 457, 2);
  12. INSERT INTO games_rate VALUES (280, 568, 0);
  13. INSERT INTO games_rate VALUES (280, 1720, 0);
  14. INSERT INTO games_rate VALUES (280, 1813, 0);
  15. INSERT INTO games_rate VALUES (280, 1873, 5);
  16. INSERT INTO games_rate VALUES (280, 1918, 5);
  17. INSERT INTO games_rate VALUES (280, 1931, 3);
  18. INSERT INTO games_rate VALUES (734, 2, 3);
  19. INSERT INTO games_rate VALUES (735, 457, 1);
  20. INSERT INTO games_rate VALUES (735, 2, 5);
  21. INSERT INTO games_rate VALUES (280, 1965, 3);
  22. INSERT INTO games_rate VALUES (735, 1968, 5);
  23. INSERT INTO games_rate VALUES (744, 457, 5);
  24. INSERT INTO games_rate VALUES (746, 457, 5);
  25. INSERT INTO games_rate VALUES (743, 457, 4);
  26. INSERT INTO games_rate VALUES (747, 2, 4);
  27. INSERT INTO games_rate VALUES (745, 547, 4);


Chyba najlepszym rozwiązaniem będze dodanie pola do bazy zawierającego średnią ocenę

Ten post edytował xamrex 7.06.2010, 08:13:43
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 27.12.2025 - 11:21