2010-06-23 2 views
1

Я пытаюсь оценить Типы фруктов по наилучшему рейтингу, указанным пользователями.Система рейтинга MySQL - Найти рейтинг

У меня есть таблица под названием Fruit Рейтинги только для представления оценок со следующей информацией

Fruit_id int 
From_ID int 
Rating int 

теперь я пытаюсь запустить команду SQL, как следующий

select From_ID, AVG(Rating) AS Rating FROM Ratings Group BY `Fruit_ID` ORDER by Rating DESC 

Это работает, однако, если я получу 1 пользователя, который оценивает фрукты яблоком 5, а затем 1000 пользователей, которые оценивают апельсин на 4, яблоко внезапно считается лучше.

Как я могу принять во внимание количество голосов, чтобы гарантировать, что наиболее проголосовавшие вместе с лучшими являются первыми.

ответ

0

Почему бы просто не выбрать количество голосов и отобразить это для пользователя. Так что да, 1 голос из 5 за яблоко будет общим 5 НО, только с 1 голосом. Это дало бы пользователям простой способ увидеть, насколько «популярен» данный рейтинг.

Так как большинство рейтинговых систем fivestar работают сегодня в сети, если я не ошибаюсь.

Удачи вам!

Ник

+0

Проблема здесь не отображает данные, она пытается ранжировать верхние плоды над одним с одним голосом – pws5068

2

Этот вопрос скорее о настройке вашей математической формулы, чем что-либо еще.

Похоже на то, что вы просите, это популярность, а не рейтинг. Простым способом сделать это может быть умножение среднего рейтинга на количество голосов. Что об этом (пожалуйста, простите меня, если мой синтаксис выключен, я от сервера SQL на данный момент):

select From_ID, AVG(Rating) * COUNT(Rating) AS Rating FROM Ratings Group BY Fruit_ID ORDER by Rating DESC

Имейте в виду, что эта формула будет оценивать 1000 голосов 1 много выше, чем 1 голос 5.

+0

Вы могли бы просто использовать ... ВЫБРАТЬ From_ID, SUM (рейтинг) AS Рейтинг FROM Оценки GROUP BY Fruit IDORDER по Рейтингу DESC ... в СРЕДНЯЯ * COUNT = SUM. –

Смежные вопросы