Witam.
Zacząłem się zastanawiać, jak rozwiązać rankingi. W różnych serwisach stosowałem różne strategie. Posiadam kolumnę item_rate (średnią) oraz item_rate_votes (ilość oddanych głosów). Defaultowo używałem ORDER item_rating DESC, item_rating_votes DESC (co jest kompletną paranoją i mijaniem się z celem, bo ilość głosów liczy się tylko i tylko wtedy, gdy rating jest identyczny).
Dwa warunki, które już stosowałem:
Aby dostać się do rankingu, musisz mieć X głosów
Zastosowane na lookme.pl w limicie 50 głosów. Minus: jak już się ma te 1000 głosów (czyli ponad 950 nad warunek), wystarczy, że średnia spadnie o 0.01 i już się wylatuje z rankingu. Czyli ilość głosów nie ma znaczenia (minus, bo niesprawiedliwe).
Mnożnik (ranga)
Algorytm wygląda prosto. Nie sortujemy wyników po kolumnie item_rate tylko obliczamy:
SELECT ( item_rate + ((item_rate * item_rate_count) / 10) ) AS item_position
Praktycznie same plusy. Minus: musimy określić dzielnik, który może okazać się mało precyzyjny (w tym przypadku 10).
Jak rozwiązujecie problem rankingów?