Оптимизация выборки с интервалом
Существует 3 таблицы: users
- все пользователи сайта; online_users
- онлайн пользователи; news
- новости.
Задача - делать выборку актуальных новостей для каждого пользователя. Идея такова: через крон раз в 10 минут перебирать онлайн пользователей и ставить флаг в таблицу users
на то, что для пользователя есть актуальные новости. Запрос составлять следующим образом.
SELECT `created_date` FROM `news` ORDER BY `created_date` DESC limit 1
- выбираем самую новую новостьSELECT `online_users`.`user_id` FROM `users` JOIN `online` ON `users`.`id` = `online`.`user_id` WHERE users.`last_readed_news` < '{$actual_news['created_date']}' AND `users`.`new_actual_news` = '0'
- перебираем таблицу онлайн пользователей, и выбираем только тех, кто эту новость не читал ещёUPDATE `users` SET `new_actual_news` = '1' WHERE `id` IN ({$Users_id})
- ставим флаг того, что для пользоваетелей есть новости
Либо конкретно из под каждого пользователя делать запрос на проверку актуальных новостей, например раз в 10 минут.
Каким способом лучше организовать?
Источник: Stack Overflow на русском