У меня есть таблица с тысячами записей новостных статей. На сайте есть страница со списком новостей с возможностью сортировки статей по популярности с бесконечной прокруткой. Таблица выглядит примерно так:
id | title | description | views | createdAt
Ключевыми столбцами для определения популярности являются виды и созданные At.
Какой алгоритм / формулу я могу реализовать, чтобы отсортировать статьи по популярности?
В настоящее время я просто сортирую по представлениям в порядке убывания, но таким образом список вряд ли когда-либо будет обновляться и показывать одни и те же статьи все время.
Одним из подходов может быть «наказание» статей по возрасту. Например, за каждый день с момента публикации статьи уменьшайте оценку на 100 (или какое-либо другое произвольное число, соответствующее количеству трафика на вашем сайте). Таким образом, старые статьи будут постепенно выталкиваться, а новые будут иметь возможность просмотра:
SELECT *
FROM articles
ORDER BY views - 100 * DATEDIFF(CURRENT_DATE, createdAt) DESC
Просто сделайте это как, надеюсь, это будет работать:
order by views,createdAt
Вы можете иметь еще один столбец с названием «lastView»
Идея состоит в том, чтобы напечатать самые последние популярные элементы, а не только популярные.
В своем запросе вы можете указать условие:
выберите * из таблицы, в которой создан> = ‘latestDate1’ и lastView> = ‘недавнийDate2’ порядок по представлениям desc; основываясь на вашей необходимости.
При каждом обновлении вы можете просто изменить недавнюю дату с помощью jQuery, что даст вам конечное число результатов. Вы можете даже уменьшить бесконечный цикл / результаты.