Какой необходимо составить запрос mysql для генератора случайного поста по рейтингу?
Подскажите плиз, как сделать генерацию СЛУЧАЙНЫХ постов на основе их рейтингов?
Например у меня есть 1000 постов, должно из БД на страницу вывестись один СЛУЧАЙНЫЙ пост, при этом, шансы вывестись на страницу больше у того, чей рейтинг больше.
На сколько я понимаю по такому принципу работают тик-ток, инстаграм, ютуб и тд. Хочу сделать чтото подобное в плане логики.
Случайным он будет казаться пользователю. Ты же сам должен уяснить проге и себе, как будет высчитываться эта «случайность». Если четко следовать условию «шансы вывестись на страницу больше у того, чей рейтинг больше», тогда просто выводи пост с наибольшим рейтингом. Ну или 10 самых рейтинговых бери из базы и выбирай из них "случайный".
John Didact, Нет, нужно чтобы выводилась случайная запись. Запись может быть выведена как самая топовая по рейтингу, так и самая плохая по рейтингу. Просто чем выше рейтинг у поста, чем выше шанс что именно этот пост будет выведен.
Посчитать кумулятивную сумму рейтинга, генерить случайное число в пределах общей суммы, брать запись, у которой посчитанное случайное входит в диапазон записи.
WITH cte AS (
SELECT *, SUM(rating) OVER (ORDER BY id) cum_rating
FROM table
)
SELECT
FROM cte t1
JOIN (SELECT RAND() * MAX(cum_rating) rnd_rating
FROM cte) t2 ON t2.rnd_rating BETWEEN t1.cum_rating - t1.rating AND t1.cum_rating
Реально, конечно, не BETWEEN, а два неравенства, по верхней границе - строгое.