为了得到它好像你正在寻找的行为因为,你可以这样做:
SELECT t.* FROM `tasks` t
WHERE t.`due_date` >= DATE(NOW())
AND ( (t.`due_date` = DATE(NOW()) AND t.`due_time` >= TIME(NOW()))
OR (t.`due_date` > DATE(NOW()))
)
第一次是与due_date进行比较,即所有今天或晚些时候到期的任务。这包括太多,我们需要摆脱今天到期但在当前时间之前的任务。
还有其他的查询方法可能看起来“更简单”。上面的方法将谓词保留在裸列上,所以MySQL可以在适当的索引上有效地使用范围扫描操作。
随访
我做这种类型的查询之前,用在关键的多列分页。有些东西让我对这个原始查询感到困扰,它的条件比真正需要的要多。 (什么扔我是在DUE_TIME的> =条件。)
我相信这是等价的:
SELECT t.* FROM `tasks` t
WHERE t.`due_date` >= DATE(NOW())
AND (t.`due_date` > DATE(NOW()) OR t.`due_time` >= TIME(NOW()))
为什么不只是存储的截止日期为'datetime'列,并保存这些麻烦? – Mureinik
这两个字段的数据类型是什么? –
而“due_date”和“due_time”列的*数据类型*是......? (这是一个问题,还是状态报告?) – spencer7593