Справочная информация:
Я использую платформу, которая позволяет пользователям следить за создателями и просматривать их содержимое.
В следующем запросе успешно отображаются 50 сообщений, упорядоченных по популярности.Есть также некоторая другая логика, чтобы не показывать сообщения, которые пользователь уже сохранил / удалил, но это не относится к этому вопросу.
Проблема:
Если один создательпользуется особой популярностью (высокий popularity
), первые 50 сообщений будут возвращены почти всеми от этого создателя.
Это искажает результаты, так как в идеале 50 возвращенных сообщений не будут в пользу одного конкретного автора.
Вопрос:
Как я могу ограничитьпоэтому автор (который использует поле posted_by
) возвращается не более 5 раз .Может быть меньше, но определенно не более 5 раз, если один конкретный автор будет возвращен.
Это все равно должно быть окончательно заказано popularity
DESC
SELECT *
FROM `source_posts`
WHERE `posted_by` IN (SELECT `username`
FROM `source_accounts`
WHERE `id` IN (SELECT `sourceid`
FROM `user_source_accounts`
WHERE `profileid` = '100'))
AND `id` NOT IN (SELECT `postid`
FROM `user_posts_removed`
WHERE `profileid` = '100')
AND `live` = '1'
AND `added` >= Date_sub(Now(), INTERVAL 1 month)
AND `popularity` > 1
ORDER BY `popularity` DESC
LIMIT 50
Спасибо.
Редактировать :
Я использую MySQL версии 5.7.24, поэтому, к сожалению, функция row_number () не будет работать в этом случае.