2016-11-09 5 views
1

У меня есть таблица с тысячами записей новостей. На веб-сайте есть страница с новостями с возможностью сортировки статей по популярности с помощью бесконечного прокрутки. Таблица выглядит примерно так:Как сортировать статьи по популярности?

id | title | description | views | createdAt 

Ключевыми рубриками для определения популярности являются виды и createdAt.

Какой алгоритм/формулу можно реализовать для сортировки статей по популярности?

В настоящее время я просто сортирую по просмотрам в порядке убывания, но таким образом список вряд ли когда-либо будет обновляться и показывать те же статьи все время.

+0

Я думаю, что это вне темы для SO. Может быть, суперпользователь будет более уместным? – Strawberry

+0

Существует несколько вариантов: 1-й - добавьте http://tablesorter.com/docs/ что-то подобное и отсортируйте таблицу по интерфейсу. 2-й - добавьте параметры «запроса» в заголовки в виде таких ссылок, как «? CreatedAt = desc», прочитайте этот параметр и добавьте его в ваш SQL-вызов, например, @WaleedAhmed. – Peon

ответ

3

Один из подходов может заключаться в том, чтобы «наказывать» статьи своим возрастом. Например, за каждый день, прошедший с момента публикации статьи, уменьшите счет на 100 (или какое-либо другое произвольное число, которое соответствует количеству трафика вашего веб-сайта). Таким образом, более старые статьи будут постепенно вытеснены и Поздние получат шанс быть просмотрены:

SELECT * 
FROM  articles 
ORDER BY views - 100 * DATEDIFF(CURRENT_DATE, createdAt) DESC 
+0

Мне нравится идея, я могу использовать это в своих проектах. – Ergec

+0

Почему бы просто не сортировать 'createdAt = desc'? – Peon

+0

@DainisAbols вместо 'view's? как вторичная колонка сортировки? – Mureinik

0

Просто сделать это, как, надеюсь, что он будет работать:

order by views,createdAt 
0

вы можете иметь еще один столбец say 'lastView'

Идея состоит в том, чтобы печатать самые последние популярные предметы, а не только популярные.

В вашем запросе можете указать следующие условия: выберите * из таблицы где created> = 'recentDate1' и lastView> = 'recentDate2' упорядочить по просмотрам desc; исходя из вашей необходимости.

При каждом обновлении вы можете просто изменить недавнюю дату через jQuery, который даст вам конечное число результатов. Вы даже можете уменьшить бесконечный цикл/результаты.

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

  • Нет связанных вопросов^_^