Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Приоритет выбора
 
 автор: Deed   (22.07.2016 в 11:45)   письмо автору
 
 

Здравствуйте!
Слаб в MySQL, каюсь.
В общем, в таблице с новостями есть поля "num_view" - количество просмотров новости, и "num_comms" - количество комментариев к ней.
Задача простецкая - выводить несколько "популярных" новостей, согласно количеству просмотров и комментов. НО приоритет, все же, на количество комментариев.

Это понятно, что:

ORDER BY `num_view`,  `num_comms` 

...а потом уже сортируешь результат.
Но так, особенно при LIMIT, выборка не совсем корректна, в нее не попадает ВСЕ нужное.
Вот как это сделать средствами MySQL? Именно вывод, скажем пяти новостей с максимальным числом просмотров и комментов, но преимущество, все же, за числом комментариев к статье.
Спасибо!

  Ответить  
 
 автор: Valick   (22.07.2016 в 12:18)   письмо автору
 
   для: Deed   (22.07.2016 в 11:45)
 

целиком запрос покажи

  Ответить  
 
 автор: Deed   (22.07.2016 в 13:31)   письмо автору
 
   для: Valick   (22.07.2016 в 12:18)
 

Еще не написал.
Да там стандартная выборка:


SELECT * FROM `news` ORDER BY `num-comms`, `num_views` LIMIT 5


Никаких выкрутасов с UNION, JOIN не будет.

  Ответить  
 
 автор: Valick   (22.07.2016 в 13:40)   письмо автору
 
   для: Deed   (22.07.2016 в 13:31)
 

по идее должно работать, что именно не так там?
сначала сортирует по num_comms, затем при равных значениях num_comms по num_view

  Ответить  
 
 автор: Deed   (22.07.2016 в 13:57)   письмо автору
 
   для: 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 комментов.

  Ответить  
 
 автор: Valick   (22.07.2016 в 14:09)   письмо автору
 
   для: Deed   (22.07.2016 в 13:57)
 

> Ведь 1000 просмотров и 100 комментов приоритетнее, чем 300 просмотров и 200 комментов.
с какого перепугу? если ты чётко дал понять, что комментарии приоритетнее?
выводи раздельно топ 5 коментов и топ 5 просмотров

  Ответить  
 
 автор: Deed   (22.07.2016 в 14:13)   письмо автору
 
   для: Valick   (22.07.2016 в 14:09)
 

Я четко дал понять, что НЕТ приоритета.
Кажется без комбинированного запроса, все же, не обойтись: http://stackoverflow.com/questions/3590530/mysql-select-multiple-maximum-values

  Ответить  
 
 автор: Valick   (22.07.2016 в 14:17)   письмо автору
 
   для: Deed   (22.07.2016 в 14:13)
 

>Я четко дал понять, что НЕТ приоритета
>вывод, скажем пяти новостей с максимальным числом просмотров и комментов, но преимущество, все же, за числом комментариев к статье

по ссылке особо не смотрел, но вес можно рассчитать по более сложной формуле, с учётом разности коментов и просмотров

  Ответить  
 
 автор: Deed   (22.07.2016 в 14:21)   письмо автору
 
   для: Valick   (22.07.2016 в 14:17)
 

>вывод, скажем пяти новостей с максимальным числом просмотров и комментов, но преимущество, все же, за числом комментариев к статье

Вот-вот!
Ведь 300 просмотров и 200 комметов к теме свидетельствуют о ее малозначности, и о том, что в ней просто разгорелся срач.

  Ответить  
 
 автор: Deed   (22.07.2016 в 14:42)   письмо автору
 
   для: Valick   (22.07.2016 в 14:17)
 

http://sqlfiddle.com/#!9/8e4944/8

  Ответить  
 
 автор: Deed   (22.07.2016 в 14:15)   письмо автору
 
   для: Valick   (22.07.2016 в 14:09)
 

>выводи раздельно топ 5 коментов и топ 5 просмотров
Та да, а потом перетасовать по дате...
Так и сделаю.
Спасибо, Valick!

  Ответить  
 
 автор: Trianon   (24.07.2016 в 16:10)   письмо автору
 
   для: Deed   (22.07.2016 в 13:57)
 

Вы бы для себя хотя бы определились с ценностью поста.
Напишите формулу оценки ценности, как функцию от числа просмотров и числа комментариев.
Ценность = F(просмотры, комментарии) 

например
Ценность = 10 * просмотры  + 90 * комментарии

и потом можно будет ее практически в том же виде воткнуть в запрос.
ORDER BY  `num_views` * 90 + `num_comms` * 10

  Ответить  
 
 автор: Deed   (25.07.2016 в 22:38)   письмо автору
 
   для: Trianon   (24.07.2016 в 16:10)
 

О! Спасибо! Однако, я не понимаю сути этого:

ORDER BY `num_views` * 90 + `num_comms` * 10

Что делают операторы сложения и умножения в синтаксисе MySQL?

Извините, что спрашиваю, но мне никогда не приходилось иметь дело с чем-то подобным.
Буду благодарен объяснению. Не обязательно "на пальцах".

  Ответить  
 
 автор: Valick   (26.07.2016 в 08:57)   письмо автору
 
   для: Deed   (25.07.2016 в 22:38)
 

>Что делают операторы сложения и умножения в синтаксисе MySQL?
умножают и складывают

  Ответить  
 
 автор: Deed   (27.07.2016 в 12:42)   письмо автору
 
   для: Valick   (26.07.2016 в 08:57)
 

А в данном случае с ORDER BY?

  Ответить  
 
 автор: Valick   (27.07.2016 в 13:38)   письмо автору
 
   для: Deed   (27.07.2016 в 12:42)
 

ну чё там непонятного?
`num_views` * 90 + `num_comms` * 10

1500 просмотров умножить на 90 плюс 300 комментариев умножить на 10 = получаем некоторое число по которому и будет производиться сортировка

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования