我試圖獲取存儲在數據庫表中的所有事件,這些事件在用戶給定的特定範圍內。它會一直工作到事件跨越多天。此時結束日期不在時間範圍內,查詢將丟棄它。我的問題是如何獲得落在給定範圍內的所有事件,無論它們是在範圍之前開始並在範圍內結束,還是在範圍內開始並結束。我必須從結果全部排除在這個範圍後開始或結束的範圍從跨越多天的數據庫中獲取事件
CREATE TABLE IF NOT EXISTS `events` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`start` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`end` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1;
當前查詢之前的事件
SELECT t0_.name AS name0, t0_.start AS start3, t0_.end AS end4
FROM events t0_
WHERE t0_.start > start
AND t0_.end < end
示例數據:
name start end
-------------------- -------------------- --------------------
test event 2012-02-17 09:00:00 2012-02-17 09:50:00
test event2 2012-02-17 09:00:00 2012-02-19 09:00:00
test event3 2012-02-12 09:00:00 2012-02-17 09:00:00
test event4 2012-02-12 09:00:00 2012-02-13 09:00:00
預期結果數據:
name start end
-------------------- -------------------- --------------------
test event 2012-02-17 09:00:00 2012-02-17 09:50:00
test event2 2012-02-17 09:00:00 2012-02-19 09:00:00
test event3 2012-02-12 09:00:00 2012-02-17 09:00:00
使用範圍:
2012-02-17 00:00:00 - 2012-02-17 23:59:59
,你可以看到我採取的是給定範圍內的事件,加上開始在後的範圍和結束的事件和範圍之前啓動,但裏面結束事件。
您是否嘗試過使用BETWEEN?開始BETWEEN date1和date2或結束BETWEEN date1和date2 –
選擇日期時,請注意'<' ,'>','<=', '> ='和'BETWEEN'。我認爲你的查詢需要'<=' and '> =',它的投射方式。 –
你能更詳細地解釋你想要的搜索條件嗎?多日活動應該發生什麼?如果多日事件的任何一天在您搜索的範圍內,是否應該找到? 「日」是什麼意思 - 午夜到午夜?或者從賽事開始的24小時內開始?建議你寫出幾個例子,並解釋爲什麼應該包括或排除它們。 –