【问题标题】:MySQL: 24 Hour interval with joinsMySQL:连接的 24 小时间隔
【发布时间】:2011-08-02 15:10:42
【问题描述】:

我有以下疑问:

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 小时内发生的所有事情?

【问题讨论】:

    标签: mysql intervals


    【解决方案1】:

    我会将 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;
    

    【讨论】:

    • 嗯..这很有趣!我不知道你能做到这一点!不过我试过了,没有任何东西被退回,而且我知道过去 24 小时内发生了一些事情……知道为什么会这样吗?
    • @dennismonsewicz 认为是连接。已将它们更改为左连接。
    • 如果我想把它限制在过去 7 天,我会用 NOW(), INTERVAL 7 DAY 替换 NOW(), INTERVAL 24 HOUR 吗?
    • @dennismonsewicz 没问题。是的,间隔可以替换为任何你想要的。将值传递给方法的奖励积分。
    猜你喜欢
    • 2013-08-27
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 2015-08-14
    • 2019-02-17
    • 1970-01-01
    相关资源
    最近更新 更多