2011-03-14 73 views
0

我的網站的用戶將能夠創建活動。他們會分別設定日期和時間。該事件將被保存到包含單獨日期和時間列的mysql數據庫中。使用MySQL CURDATE()和CURTIME()返回結果,但未通過

我想查詢數據庫以返回即將到來但未通過的事件。即事件日期是今天或將來,如果事件日期是今天,則檢查事件的時間未經過。

我不知道這個語法,我似乎無法找到任何地方。

如果有人知道這樣做的好方法,我非常感謝您的幫助。

回答

0
select * from table where concat_ws(' ',date_field,time_field) > now() 

爲什麼不使用日期時間字段?

+0

該查詢可能會返回正確的結果,但它會很慢,因爲它執行表掃描而不是索引掃描。 – 2011-03-14 21:01:12

+0

嗨艾克。謝謝你的評論。我不是mysql優化的專家:) – 2011-03-14 21:11:24

0
在僞

if ((date > today) OR (date == today AND time > now)) 
2

最簡單的方法在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()