2011-11-28 157 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