MySQL: 24-часовой интервал с объединениями - PullRequest
0 голосов
/ 02 августа 2011

У меня следующий запрос:

select * from winners 
join profiles on winners.subscriber_id = profiles.subscriber_id 
join comments on comments.profile_id = profiles.vanity
join videos on winners.subscriber_id = videos.subscriber_id
join photos on winners.subscriber_id = photos.subscriber_id
where winners.round_id >= 4 AND winners.active = true 
AND (comments.created_at > DATE_SUB( NOW(), INTERVAL 24 HOUR) OR videos.created_at > DATE_SUB( NOW(), INTERVAL 24 HOUR) OR photos.created_at > DATE_SUB( NOW(), INTERVAL 24 HOUR)) AND comments.parent_id = 0;

Этот запрос выполняется для задания cron, которое извлекает самую свежую информацию за последние 24 часа для каждого победителя, а затем отправляет по электронной почте каждому из поклонников победителей последнюю информацию.

Проблемы, с которыми я сталкиваюсь, заключаются в том, что запрос возвращает ложные срабатывания в том случае, если комментарий к видео произошел в течение последних 24 часов, то он возвращает видео и комментарий. Есть ли какой-либо предел для получения ВСЕГО, что произошло за последние 24 часа?

1 Ответ

1 голос
/ 02 августа 2011

Я бы переместил 24-часовой чек в соединение. Таким образом, мы присоединяемся только к элементам, которые были недавно обновлены.

select * from winners 
    join profiles on winners.subscriber_id = profiles.subscriber_id
    left join comments on (comments.profile_id = profiles.vanity AND comments.created_at > DATE_SUB( NOW(), INTERVAL 24 HOUR))
    left join videos on (winners.subscriber_id = videos.subscriber_id AND videos.created_at > DATE_SUB( NOW(), INTERVAL 24 HOUR))
    left join photos on (winners.subscriber_id = photos.subscriber_id AND photos.created_at > DATE_SUB( NOW(), INTERVAL 24 HOUR))
where winners.round_id >= 4 AND winners.active = true 
AND comments.parent_id = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...