|
|
|
| Здравствуйте!
Слаб в MySQL, каюсь.
В общем, в таблице с новостями есть поля "num_view" - количество просмотров новости, и "num_comms" - количество комментариев к ней.
Задача простецкая - выводить несколько "популярных" новостей, согласно количеству просмотров и комментов. НО приоритет, все же, на количество комментариев.
Это понятно, что:
ORDER BY `num_view`, `num_comms`
|
...а потом уже сортируешь результат.
Но так, особенно при LIMIT, выборка не совсем корректна, в нее не попадает ВСЕ нужное.
Вот как это сделать средствами MySQL? Именно вывод, скажем пяти новостей с максимальным числом просмотров и комментов, но преимущество, все же, за числом комментариев к статье.
Спасибо! | |
|
|
|
|
|
|
|
для: Deed
(22.07.2016 в 11:45)
| | целиком запрос покажи | |
|
|
|
|
|
|
|
для: Valick
(22.07.2016 в 12:18)
| | Еще не написал.
Да там стандартная выборка:
SELECT * FROM `news` ORDER BY `num-comms`, `num_views` LIMIT 5
|
Никаких выкрутасов с UNION, JOIN не будет. | |
|
|
|
|
|
|
|
для: Deed
(22.07.2016 в 13:31)
| | по идее должно работать, что именно не так там?
сначала сортирует по num_comms, затем при равных значениях num_comms по num_view | |
|
|
|
|
|
|
|
для: Valick
(22.07.2016 в 13:40)
| | Выбирает больше те записи, условие которой стоит первым в ORDER BY.
Например, есть записи, где ta) просмотров 1000, комментов 100, а есть tb) просмотров 1500, но комментов 10.
Если
ORDER BY `num_views`, `num_comms`
|
то приоритет отдается tb.
Если
ORDER BY `num_comms`,`num_views`
|
и tc) просмотров 300, комментов 200 и ta) просмотров 1000, комментов 100, выбирает tc, где просто больше комментов.
Мне же нужно выбрать записи с максимальным количеством и просмотров, и комментов.
Ну, комбинированное что-то, "популярное".
Ведь 1000 просмотров и 100 комментов приоритетнее, чем 300 просмотров и 200 комментов.
Но 1000 просмотров и 100 комментов приоритетнее, чем 1500 просмотров и 10 комментов. | |
|
|
|
|
|
|
|
для: Deed
(22.07.2016 в 13:57)
| | > Ведь 1000 просмотров и 100 комментов приоритетнее, чем 300 просмотров и 200 комментов.
с какого перепугу? если ты чётко дал понять, что комментарии приоритетнее?
выводи раздельно топ 5 коментов и топ 5 просмотров | |
|
|
|
|
|
|
|
для: Valick
(22.07.2016 в 14:09)
| | Я четко дал понять, что НЕТ приоритета.
Кажется без комбинированного запроса, все же, не обойтись: http://stackoverflow.com/questions/3590530/mysql-select-multiple-maximum-values | |
|
|
|
|
|
|
|
для: Deed
(22.07.2016 в 14:13)
| | >Я четко дал понять, что НЕТ приоритета
>вывод, скажем пяти новостей с максимальным числом просмотров и комментов, но преимущество, все же, за числом комментариев к статье
по ссылке особо не смотрел, но вес можно рассчитать по более сложной формуле, с учётом разности коментов и просмотров | |
|
|
|
|
|
|
|
для: Valick
(22.07.2016 в 14:17)
| | >вывод, скажем пяти новостей с максимальным числом просмотров и комментов, но преимущество, все же, за числом комментариев к статье
Вот-вот!
Ведь 300 просмотров и 200 комметов к теме свидетельствуют о ее малозначности, и о том, что в ней просто разгорелся срач. | |
|
|
|
|
|
|
|
|
для: Valick
(22.07.2016 в 14:09)
| | >выводи раздельно топ 5 коментов и топ 5 просмотров
Та да, а потом перетасовать по дате...
Так и сделаю.
Спасибо, Valick! | |
|
|
|
|
|
|
|
для: Deed
(22.07.2016 в 13:57)
| | Вы бы для себя хотя бы определились с ценностью поста.
Напишите формулу оценки ценности, как функцию от числа просмотров и числа комментариев.
Ценность = F(просмотры, комментарии)
|
например
Ценность = 10 * просмотры + 90 * комментарии
|
и потом можно будет ее практически в том же виде воткнуть в запрос.
ORDER BY `num_views` * 90 + `num_comms` * 10
|
| |
|
|
|
|
|
|
|
для: Trianon
(24.07.2016 в 16:10)
| | О! Спасибо! Однако, я не понимаю сути этого:
ORDER BY `num_views` * 90 + `num_comms` * 10
|
Что делают операторы сложения и умножения в синтаксисе MySQL?
Извините, что спрашиваю, но мне никогда не приходилось иметь дело с чем-то подобным.
Буду благодарен объяснению. Не обязательно "на пальцах". | |
|
|
|
|
|
|
|
для: Deed
(25.07.2016 в 22:38)
| | >Что делают операторы сложения и умножения в синтаксисе MySQL?
умножают и складывают | |
|
|
|
|
|
|
|
для: Valick
(26.07.2016 в 08:57)
| | А в данном случае с ORDER BY? | |
|
|
|
|
|
|
|
для: Deed
(27.07.2016 в 12:42)
| | ну чё там непонятного?
`num_views` * 90 + `num_comms` * 10
1500 просмотров умножить на 90 плюс 300 комментариев умножить на 10 = получаем некоторое число по которому и будет производиться сортировка | |
|
|
|