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
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 |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 1 575 Pomógł: 299 Dołączył: 26.03.2009 Ostrzeżenie: (20%)
|
|
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 267 Pomógł: 1 Dołączył: 10.08.2007 Ostrzeżenie: (0%)
|
Nazwa tabeli games_ratePola jakie mam w bazie game_id, user_id, rate
Wrzucając kod do bazy
dostaje error Nieznana kolumna 'rate' w field list Ja nie mam tabeli ze średnimi, więc liczę ją dzieląc sumę ocen przez ilość głosów Ten post edytował xamrex 6.06.2010, 22:54:28 |
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 1 575 Pomógł: 299 Dołączył: 26.03.2009 Ostrzeżenie: (20%)
|
A masz kolumnę rate w tabeli ? Człowieku myśl (IMG:style_emoticons/default/withstupidsmiley.gif)
|
|
|
|
Post
#5
|
|
|
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ś
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
Chyba najlepszym rozwiązaniem będze dodanie pola do bazy zawierającego średnią ocenę Ten post edytował xamrex 7.06.2010, 08:13:43 |
|
|
|
Post
#6
|
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D |
Po pierwsze: Patrzę na tabelę z ocenami i widzę jedną głupotę. Jak użytkownik może kilka razy ocenić tę samą grę? Nie widzisz tego?
1 test 5 1 test 3 2 test 2 3 test 5 3 test 1 Gry numer 1 i 3 zostały ocenione przez tego samego usera dwukrotnie. Tego należy uniknąć. Jeśli już się tego pozbędziesz to napisanie zapytania robiącego coś w stylu a co zrobiłeś wcześniej xamrex da faktycznie prawidłowy rezultat. Na ten moment też powinno. O ile tabela nie ma byków! |
|
|
|
Post
#7
|
|
|
Grupa: Zarejestrowani Postów: 267 Pomógł: 1 Dołączył: 10.08.2007 Ostrzeżenie: (0%)
|
Cytat Gry numer 1 i 3 zostały ocenione przez tego samego usera dwukrotnie. Tego należy uniknąć. Jeśli już się tego pozbędziesz to napisanie zapytania robiącego coś w stylu W bazie tak nie mam, Podałem zły przykład. Łał zapytanie pięknie działa Domyślam się, że zapytanie wyświetla jeśli gra była oceniona min 2 razy czy to prawda? Ten post edytował xamrex 7.06.2010, 13:56:02 |
|
|
|
Post
#8
|
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D |
Nie... Grupowanie działa już przy choć jednym rekordzie. Wystarczy więc minimum jedna ocena i zapytanie liczące średnią tej gry ruszy. Średnia z jednej oceny równa się jej samej, matematycznie patrząc.
|
|
|
|
Post
#9
|
|
|
Grupa: Zarejestrowani Postów: 267 Pomógł: 1 Dołączył: 10.08.2007 Ostrzeżenie: (0%)
|
dzięki za odpowiedz
Czy da się zmodyfikować zapytanie żeby wyświetlał game_id i srednia (Lecz musi być min 2 głosów)? Ten post edytował xamrex 7.06.2010, 16:17:45 |
|
|
|
Post
#10
|
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D |
Tak... musisz minimalną liczbę głosow określić w klauzuli HAVING tuż za warunkiem dla GROUP BY, czyli przykładowo GROUP BY game_id HAVING count(rate) > 1
|
|
|
|
Post
#11
|
|
|
Grupa: Zarejestrowani Postów: 267 Pomógł: 1 Dołączył: 10.08.2007 Ostrzeżenie: (0%)
|
bardzo dziękuję za pomoc.
|
|
|
|
Post
#12
|
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D |
SQL i pisanie w nim zapytań jest proste jeśli ktoś zna podstawy tego języka (kolejność i składnię klauzul) i umie angielski. Zapytanie można bowiem do nich wtedy ładnie zapisać. Przykładem jest Twoje choćby:
SELECT game_id, avg(rate) AS srednia FROM games_rate GROUP BY game_id HAVING count(rate) > 1 ORDER BY srednia DESC Wybierz ( SELECT ) game_id i średnią ( avg ) głosów nazywając ją ( AS ) srednia z ( FROM ) games_rate grupując głosy po ( GROUP BY ) game_id i jeśli dla danego game_id posiadającego (HAVING) więcej niż jedną ocenę (count(rate) > 1 ) zaś całość wyników uporządkuj ( ORDER BY ) po średniej - malejąco ( DESC ) (IMG:style_emoticons/default/smile.gif) Jak widzisz, jest to dość proste i naturalne, jeśli dobrze sie całość opisze. Czasem jest trudniej jeśli ktoś pomyli kolejność, użyje słów zarezerwowanych bądź zrobi byka, literówkę. Wtedy się potrafi parser burzyć. |
|
|
|
![]() ![]() |
|
Aktualny czas: 24.12.2025 - 23:01 |