mysql 我以后怎么找唱片

ccgok5k5  于 5个月前  发布在  Mysql
关注(0)|答案(2)|浏览(50)

如果一个插槽是重复发生的,它发生在每周的同一时间。
我如何获取记录安排在一天,一周,或一个月后,考虑到当前的日期和时间?我使用MySQL。
我目前的查询是

SELECT *
FROM `timetable`
WHERE (`week` >= {$week} OR `recurring` = 1)
    AND `day` >= {$day}
    AND `hour` >= {$hour}
LIMIT 3

字符串

rsl1atfo

rsl1atfo1#

假设你想要包括所有每周重复发生的事件,因为在你当前的周/日/小时之前总是会有一个事件。我还假设你想要所有在当前周之后发生的事件,而不管是哪一天,在当前周内,你想要所有在当前日之后发生的事件,而不管是哪一小时。
如果这一切都是正确的,那么你的条件就变成了:

WHERE `recurring` = 1
OR `week` >= {$week} AND (
    `week` > {$week}
    OR `day` >= {$day} AND (
        `day` > {$day}
        OR `hour` >= {$hour}
    )
)

字符串

luaexgnf

luaexgnf2#

在那天的晚些时候

SELECT *
FROM `timetable`
WHERE `recurring` = 1 AND
      DATE_ADD(`the_time`, INTERVAL 7 DAY) BETWEEN NOW() AND CAST(DATE_ADD(NOW(), INTERVAL 1 DAY) AS DATE)

字符串
说明:

  • 我们寻找重复发生的事件
  • 我们感兴趣的是当前时刻和第二天开始之间的事件
  • 下一个日期的开始是通过在这个时刻加上一天并将其转换为日期来计算的
  • 我把你的时间列命名为the_time,用你的时间列代替这个

在这周的晚些时候

SELECT *
FROM `timetable`
WHERE `recurring` = 1 AND
      DATE_ADD(`the_time`, INTERVAL 7 DAY) BETWEEN NOW() AND CAST(DATE_ADD(NOW(), INTERVAL (7 - WEEKDAY(NOW())) DAY) AS DATE)


这里的逻辑是一样的,除了在间隔的末尾,我们添加与一周剩余天数相同的天数,我们为星期一添加7天,为星期二添加6天,等等。
现在,WEEKDAY返回0表示星期一,1表示星期二,依此类推。
所以,7周将导致我们想要的确切差异。

本月下旬

SELECT *
FROM `timetable`
WHERE `recurring` = 1 AND
      DATE_ADD(`the_time`, INTERVAL 7 DAY) BETWEEN NOW() AND DATE_ADD(LAST_DAY(NOW()), INTERVAL 1 DAY)


类似的查询,但与下个月开始。

一般说明

如果你可能在午夜发生事件,那么你可能想从间隔的最右端减去一秒,或者用<=<代替between
同样,这样你就可以找到重复发生的事件,但是你只找到一次。所以,如果你每个星期五晚上都有一个星期五晚上的Karlings,并且计划从本月剩余时间开始发生两次,那么这个查询将只找到一次。
如果要在“月”视图中显示每月排定的重复事件的次数,可以使用联合查询或存储过程。

相关问题