mysql - 从现在开始的日期范围查询

标签 mysql

我正在创建一个查询来显示当前日期时间之前 1 周和之后 1 天的表现,但是我想我可能错过了一个技巧,因为它要么以一种方式过滤结果,要么以另一种方式过滤结果,但没有同时考虑这两个部分考虑范围

SELECT BookID, concat(c.FirstName, ' ', c.SurName) as CustName, m.Title, pic.City, s.Name, DATE_FORMAT(p.TimeStarts, '%a - %b %e - %Y') AS Date, DATE_FORMAT(p.TimeStarts, '%h:%i %p') AS Time, b.NumAdults, b.NumChilds, b.TotalCost 
FROM booking b
JOIN customer c ON b.CustID = c.CustID
JOIN perf p ON b.PerfID = p.PerfID
JOIN movie m ON p.MovieID = m.MovieID
JOIN screens s ON p.ScreenID = s.ScreenID
JOIN pictures pic ON s.PictureID = pic.PictureID
WHERE b.BookID = BookingID AND p.TimeStarts > NOW() - INTERVAL 1 DAY AND p.TimeStarts < NOW() + INTERVAL 7 DAY;

如有任何帮助,我们将不胜感激

编辑: 下面似乎已经解决了我的问题,我已经添加或删除了日期并将其与当前时间进行比较,似乎有点颠倒逻辑但奇怪的是......感谢 Arth 特别是在接受我做日期错误,会将您的答案标记为已解决,因为它确实有很大帮助。非常感谢其他人的贡献

SELECT BookID, concat(c.FirstName, ' ', c.SurName) as CustName, m.Title, pic.City, s.Name, DATE_FORMAT(p.TimeStarts, '%a - %b %e - %Y') AS Date, DATE_FORMAT(p.TimeStarts, '%h:%i %p') AS Time, b.NumAdults, b.NumChilds, b.TotalCost 
FROM booking b
JOIN customer c ON b.CustID = c.CustID
JOIN perf p ON b.PerfID = p.PerfID
JOIN movie m ON p.MovieID = m.MovieID
JOIN screens s ON p.ScreenID = s.ScreenID
JOIN pictures pic ON s.PictureID = pic.PictureID
WHERE b.BookID = booking AND
(
p.TimeStarts - INTERVAL 6 DAY <= NOW()
AND
p.TimeStarts + INTERVAL 1 DAY >= NOW()
)

最佳答案

您的查询涵盖从前 1 天到后 1 周的范围:

 p.TimeStarts > NOW() - INTERVAL 1 DAY AND p.TimeStarts < NOW() + INTERVAL 7 DAY;

从前 1 周到后 1 天的范围(按照曲中的要求)是:

 p.TimeStarts > NOW() - INTERVAL 7 DAY AND p.TimeStarts < NOW() + INTERVAL 1 DAY;

我倾向于将 >= 用于第一个运算符,因为它更适合基于日期的查询,而且我喜欢这种一致性。但是,除非此查询对时间要求很高,否则它的影响可以忽略不计。

更新

就我个人而言,我从不使用 BETWEEN 作为日期或时间范围,因为我通常希望最大值是唯一的。

假设我想包括 11 月 16 日的所有预订,这是正确的:

p.TimeStarts >= '2015-11-16' AND p.TimeStarts < '2015-11-16' + INTERVAL 1 DAY

这是不正确的,因为它包括 11 月 17 日的 00:00:00:

p.TimeStarts BETWEEN '2015-11-16' AND '2015-11-16' + INTERVAL 1 DAY

我经常看到这种情况,但这取决于秒是记录的最短时间单位,让我们面对它是非常可怕的:

p.TimeStarts BETWEEN '2015-11-16 00:00:00' AND '2015-11-16 23:59:59'

关于mysql - 从现在开始的日期范围查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33758526/

相关文章:

php - 上传文件并使用 file_get_contents php 读取

mysql - 使用连接设置用户定义的变量

php - mysql 两个查询

C# MySQL - "Update"正在选择每一行/所有内容

mysql - 如何使用一张表到一列关系创建关系表

MYSQL从用户表中选择其中一半是女性,一半是男性

php - 如何控制 MySQL 中的最后一次导入

php - MySQL Select 查询 - 限制不是记录数,而是返回结果的类型

php - 无法在 WordPress 环境中以编程方式创建用户

php - 如何访问 while 循环之外的 mysql_fetch_array 函数输出...?