Задать вопрос

Топ по нескольким параметрам. PHP+MySQL

Здравствуйте. Подскажите пожалуйста как сделать Топ по нескольким параметрам.
Есть база в которой содержится оценка. Надо сформировать топ не просто по максимальной, а еще учитывая сколько всего проголосовало (количество записей). PHP+MySQL
  • Вопрос задан
  • 3269 просмотров
Подписаться 6 Оценить 1 комментарий
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 7
ENargit
@ENargit
Посмотрите на вариант, который используется Яндексом для магазинов.

В Вашем случае, можно Rq взять равным, например, 1.
Ответ написан
@Bruteo
Посчитать среднее?

SELECT sum(rating/COUNT(*)) as avg FROM table GROUP BY element_id ORDER BY avg DESC LIMIT 10
Ответ написан
Duti_Fruti
@Duti_Fruti Автор вопроса
Либо я не совсем вас понял, либо вы меня.

Надо:
Чтобы скажем оценка 4(среднее) и количество записей 50, было выше чем оценка 5 с 40 записей.

Что бы было еще понятнее для чего это:
Есть голосование за книгу, средний бал за книгу 4.3 пришел человек и поставил другой книге 5 (это первая оценка), что бы она не стала выше чем книга с 4.3 где проголосовало 20 человек.
Ответ написан
@nuclear
ORDER BY param1,param2?
Ответ написан
Комментировать
Dzuba
@Dzuba
Сортировать можно по нескольким полям:
SELECT * FROM votes
GROUP BY item_id
ORDER BY COUNT(*) DESC, AVG(vote_value) DESC
LIMIT 10;

Если Вас и это не устроит, то, пожалуйста, сформулируйте суть соотношения между рейтингом и количеством голосов.
Ответ написан
Комментировать
Вот смотрите есть 3 книги 1-ая 20 голосов 4.3 средняя, 2-ая 4 голоса 4.8 средняя, и 3-ая 30 голосов средняя 4.2
делаем расчет

Кол.гол/ср. оценка

1. 20/4.3=4.6
2. 4/4.8=0.8
3. 30/4.2=7.14

сортируем
1. место 3 книга
2. место 1 книга
3. место 2 книга
Пример:

table «book»
id| name | id_mark|

table «mark»
id_mark| mark

select b.name,((select (count(mark)/(sum(mark)/count(mark))) from mark m where m.id_mark=b.id_mark)) as mVal from book b order by mVal DESC;

sql может быть все зависит от архитектуры БД
Ответ написан
Duti_Fruti
@Duti_Fruti Автор вопроса
gaelpa, я прошу помощи в реализации наиболее корректного топа. Как и что я сам не знаю. Изложил только суть, что есть книги, голоса и количество голосов. Интересует как бы делали Вы или как это делать надо.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽