爲了得到它好像你正在尋找的行爲因爲,你可以這樣做:
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