2011-11-28 155 views
-1

表:MySQL的日期今天

  • 活動:ID,姓名,日期,時間,結束日期,結束時間

基本上,我得到了甾體抗炎藥的查詢:

TODAY: 
SELECT * FROM activities WHERE DATE(A.date) = DATE(CURDATE()) 

TOMORROW: 
SELECT * FROM activities WHERE DATE(A.date) = (CURDATE() + INTERVAL 1 DAY) 

NEXT WEEK: 
SELECT * FROM activities WHERE UNIX_TIMESTAMP(A.DATE) BETWEEN '" . strtotime('previous saturday') . "' AND '" . (strtotime('previous monday') - 1) . "' 

的問題是,我不知道如何解決它,當插入enddate時,它應該搜索日期和結束日期。因此,如果活動昨天開始,並且今天結束,並且我們選擇「今天」查詢,我們仍然希望活動。

+2

什麼是列類型列'日期'?如果是日期,爲什麼您需要使用DATE進行1和2查詢? – ajreal

+1

你會想要指定你的表的哪些字段是'NULL'-able(我想'endDate'),並且你想要你的查詢取決於什麼(例如活動在給定日期開始或結束,或者活動在給定日期開放,所以「今天」介於'date'和'endDate'之間) – Romain

+0

因此,您想要檢索與感興趣時段重疊的所有活動? –

回答

1
SELECT * 
FROM activities 
WHERE DATE(now()) BETWEEN DATE(A.startdate) AND DATE(B.enddate) 

的「之間」的語法不限於只是field between val1 and val2,它也可以是val between field1 and field2和其他任意表達。

+0

是的,雖然如果'endDate IS NULL'(不確定)可能會給出不正確的結果 – Romain

+0

'... AND DATE(IFNULL(B.enddate),some_default_value))'? –

+0

Aight可以提供更多的感知,但是如果我們想過濾一段時間,例如下一個週末:AND UNIX_TIMESTAMP(A.DATE)BETWEEN'「。strtotime('next saturday')。'''和''。(strtotime('next monday') - 1)。「'」所以我們就像BETWEEN(在x之間) – user1066101