![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 11.04.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
jest sobie serwis x i głosuje się tam na fotki, każdy użytkownik ma ranking liczony na podstawie oddanych głosów, skala od 1-10 wartość średnia odpada (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
potrzebuję uwzględnić coś takiego że np profil mający 100 głosów na '1' jest dużo gorszy od profilu mającego 10 głosów na '1', a np profil mający głosy 1x8, 1x9, 1x10 jest lepszy od tego, który ma tylko 1x10.... wydaje się proste ale nic mądrego nie przychodzi mi do głowy, szukam, szukam i ciężko... miliony jets tkaich serwisów, gdzie głosuje sie na cokolwiek ale nie mogę znaleź gotowych rozwiązań |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 136 Pomógł: 22 Dołączył: 19.09.2007 Skąd: Sosnowiec Ostrzeżenie: (0%) ![]() ![]() |
Myślę, że najlepsze rozwiązanie to wyznaczenie średniej oceny a następnie branie pod uwagę ilości oddanych głosów. W zależności od średniej, duża ilość głosów świadczyłaby na korzyść lub niekorzyść wartości oceny o tej samej średniej.
Teraz chodzi o ustalenie wagi głosów. Bo akurat skrajne głosy są oczywiste, 3x10 jest mniej warte od 5x10, ale 5x1 jest mniej warte od 3x1. Ale co w przypadku 3x3 a 5x3? Co w przypadku 3x4 a 5x4? Trzeba przyjąć połowę, czyli średnią 5,5. Oceny o tej samej średniej, ale większej (lub równej) od połowy, będą sortowane wg. malejącej ilości głosów, te ze średnią mniejszą od połowy, sortowane wg. rosnącej ilości głosów. Jak to będzie wyglądało w praktyce? Fotka 1: 1 1 1 1 1 1 1 1 (średnia: 1, głosów: 8) Fotka 2: 1 1 1 1 1 (średnia: 1, głosów: 5) Fotka 3: 1 1 1 1 1 1 1 1 1 1 1 1 2 (średnia: 1.076, głosów: 13) Fotka 4: 1 1 1 1 1 1 1 1 1 1 1 1 1 3 (średnia: 1.143, głosów: 14) Fotka 5: 5 6 (średnia: 5.5, głosów: 2) Fotka 6: 5 6 5 6 5 6 5 6 (średnia: 5.5, głosów: 8) Fotka 7: 5 5 6 5 6 5 6 5 (średnia: 5.375, głosów: 8) Fotka 8: 5 (średnia: 5, głosów: 1) Fotka 9: 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 (średnia: 5, głosów: 25) Posortowane da w wyniku fotki (kolejno od najlepszej do najgorszej): 6, 5, 7, 8, 9, 4, 3, 2, 1 Trzeba więc przyjąć, że Fotki o średniej < 5.5 są negatywne, a fotki >= 5.5 pozytywne. Im mniej głosów w fotce o ocenie negatywnej tym lepiej, odwrotnie dla fotek pozytywnych: ogromna ilość głosów przy zachowaniu oceny pozytywnej jest więcej warta od tej samej średniej ale uzyskanej np. 3 głosami. Ciężko będzie znaleźć inne rozwiązanie. Te podane przez Spirit86 raczej odpadają. Pierwszy sposób nie zmienia właściwie nic, drugi zaś o ilę się nie mylę wykaże, że 2x10 + 1000x1 jest lepsze od 1x10 + 1x1. Namieszałem, co? W bazie dla każdej fotki przechowywana jest suma głosów i ilość głosów. Teraz wyciągasz za pomocą dwóch zapytań fotki pozytywne i negatywne (przyznaję się bez bicia, że nie wiem jak rozwiązać to za pomocą jednego zapytania) sortując je głównie wg średniej oceny (suma/ilość) a następnie wg. ilości głosów (inaczej dla obu zapytań, w zalezności od tego czy fotki są pozytywne czy negatywne). Coś jakby: Kod [Pozytywne]: SELECT photo_id FROM photo_rating WHERE photo_rate_sum/photo_rate_count >= 5.5 ORDER BY photo_rate_sum DESC, photo_rate_count DESC Kod [Negatywne]: SELECT photo_id FROM photo_rating WHERE photo_rate_sum/photo_rate_count < 5.5 ORDER BY photo_rate_sum DESC, photo_rate_count ASC I to właściwie tyle... Pozdrawiam! |
|
|
![]() ![]() |
![]() |
Aktualny czas: 7.10.2025 - 02:42 |