[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: помогите написать SQL-запрос
Prettynim
На сайте есть голосование по 10 балльной системе. Рейтинг показывает среднее число (баллы делим на количество проголосовавших людей).
Делаю сортировку новостей по рейтингу.
В бд есть два поля: rating и vote_num.
получается, что в скрипте rating / vote_num и выводим рейтинг.
А как мне сразу отсортировать запрос в бд по rating / vote_num??
Подскажите, пожалуйста, возможно ли это.
Valick
ORDER BY rating, vote_num
если у вас rating - это баллы, а vote_num - количество проголосовавших
то
ORDER BY rating/vote_num

но лучше хранить в отдельном столбце баллы деленные на количество, так как можно этот столбец проиндексировать, что положительно скажется на скорости сортировки

_____________
Стимулятор ~yoomoney - 41001303250491
DedMorozzz
Цитата (Valick @ 26.07.2013 - 14:07)

ORDER BY rating/vote_num

Слишком простая система оценки. И как следствие - не совсем объективная
Вот интересная статейка. И главное в тему - http://habrahabr.ru/company/darudar/blog/143188/

_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
Prettynim
венец моих мучений, честно сказать не знала, что можно деление использовать. Спасибо вам!
SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, 
p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM post p LEFT JOIN post_extras e
ON (p.id=e.news_id) WHERE symbol = 'А' AND approve=1 AND date < '2013-07-26 15:31:22' ORDER BY rating/vote_num desc LIMIT 0,12
Prettynim
Цитата (DedMorozzz @ 26.07.2013 - 11:19)
Цитата (Valick @ 26.07.2013 - 14:07)

ORDER BY rating/vote_num

Слишком простая система оценки. И как следствие - не совсем объективная
Вот интересная статейка. И главное в тему - http://habrahabr.ru/company/darudar/blog/143188/

Да, это точно, кто популярнее? Тот за кого проголосовало 9 человек, но все поставили тройки?
Или тот, за кого проголосовало три человека, но все поставили 10ки)))
DedMorozzz
Цитата (Prettynim @ 26.07.2013 - 14:34)

Да, это точно, кто популярнее? Тот за кого проголосовало 9 человек, но все поставили тройки?
Или тот, за кого проголосовало три человека, но все поставили 10ки)))

В статье это же описанно. И привидён пример амазона

Цитата

Неправильное решение №2

Рейтинг = Средняя оценка = (Число положительных оценок) / (Число всех оценок)


Почему это неправильно. Средняя оценка хорошо работает, если у вас всегда куча оценок. Но предположим, что у одного объекта 2 положительные оценки и 0 отрицательных. Предположим далее, что у второго объекта 100 положительных оценок и 1 отрицательная. Данный алгоритм разместит второй объект (с кучей положительных оценок) ниже первого объекта (с очень малым числом положительных оценок). Это неправильно.

Сайты, которые допускают подобную ошибку: Amazon
user posted image


_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.