我的網站的用戶將能夠創建活動。他們會分別設定日期和時間。該事件將被保存到包含單獨日期和時間列的mysql數據庫中。使用MySQL CURDATE()和CURTIME()返回結果,但未通過
我想查詢數據庫以返回即將到來但未通過的事件。即事件日期是今天或將來,如果事件日期是今天,則檢查事件的時間未經過。
我不知道這個語法,我似乎無法找到任何地方。
如果有人知道這樣做的好方法,我非常感謝您的幫助。
我的網站的用戶將能夠創建活動。他們會分別設定日期和時間。該事件將被保存到包含單獨日期和時間列的mysql數據庫中。使用MySQL CURDATE()和CURTIME()返回結果,但未通過
我想查詢數據庫以返回即將到來但未通過的事件。即事件日期是今天或將來,如果事件日期是今天,則檢查事件的時間未經過。
我不知道這個語法,我似乎無法找到任何地方。
如果有人知道這樣做的好方法,我非常感謝您的幫助。
select * from table where concat_ws(' ',date_field,time_field) > now()
爲什麼不使用日期時間字段?
if ((date > today) OR (date == today AND time > now))
最簡單的方法在SQL高效表達這一點,並利用您的日期和/或時間列的任何索引的會是這樣的查詢:
SELECT *
FROM your_table
WHERE date_column > current_date()
OR (date_column = current_date() AND time_column > current_time())
根據您使用的是哪個版本的MySQL以及您的表是如何索引的,優化器會優先選擇以兩個SELECT UNION組合在一起以避免OR的查詢的機率很小:
SELECT *
FROM your_table
WHERE date_column > current_date()
UNION
SELECT *
FROM your_table
WHERE date_column = current_date()
AND time_column > current_time()
該查詢可能會返回正確的結果,但它會很慢,因爲它執行表掃描而不是索引掃描。 – 2011-03-14 21:01:12
嗨艾克。謝謝你的評論。我不是mysql優化的專家:) – 2011-03-14 21:11:24