Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pobieranie ocen - optymalizacja
_tomek
post
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 31.05.2012

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


Hej!

W wolnych chwilach piszę niedużą aplikację do robienia rankingów na podstawie ocen. Mam to rozpisane tak, że w tabeli "rates" mam id gry i wartość oceny. I teraz, chciałbym pobierać przy każdej grze wszystkie wpisy z danym id i wyciągać średnią, ale obawiam się, że przy dużej ilości takich wpisów, to nie da rady wydajnościowo. Jak inaczej mogę to rozwiązać? Myślałem, żeby zrobić w tabeli z grami kolumnę "rate" i tam zapisywać średnią liczoną w momencie, gdy ktoś oceni tę grę. Może macie inne pomysły?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Sephirus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Jeżeli masz dobrze skonstruowaną tabelę z wpisami, ocena jest liczbą to nie powinno być problemu - wystarczy używać zapytań w stylu:

  1. SELECT AVG(ocena) AS srednia FROM wpisy WHERE id = 123 --- i tak dalej


Jeżeli wpisów masz naprawdę dużo a do tego pojedynczy rekord jest duży (dużo pól, pola tekstowe itd...) dobrym rozwiązaniem było by utworzenie dodatkowej tabeli na przechowywanie samych ocen powiązanej do wpisów po id wpisu. Wówczas działania po takiej tabeli będą dużo szybsze.

Jeśli to jeszcze nie da rady - to nic nie stoi na przeszkodzie aby keszować te oceny w jakikolwiek sposób - tak by nie musiały być liczone przy każdorazowym wyświetleniu.

W ogóle moim zdaniem najprościej można dodać pole sumy ocen do samego rekordu gry bądź powiązanej z nim tabelki wraz z liczbą glosow:

ocena | glosow
60 12

I teraz przy każdym głosowaniu wykonujesz na tym jednym rekordzie "... SET ocena = ocena + [wybrana_ocena], glosow = glosow + 1 WHERE ..." (IMG:style_emoticons/default/smile.gif) Średnia to zawsze:

  1. SELECT ocena/glosow AS srednia FROM tabelka WHERE id = [id_gry]


(IMG:style_emoticons/default/wink.gif)

Ten post edytował Sephirus 1.06.2012, 07:45:59
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: 17.09.2025 - 10:16