我正在尝试列出两个日期之间的所有内容,包括那些在特定日期之前和之后具有开始日期和结束日期的项目 .
例:
SELECT * FROM expenses WHERE (userid = '#' AND exstartdate >= '2015-07-25'
AND exenddate <= '2015-08-24') OR (userid = '#' AND reg='Yes')
ORDER BY eamount DESC LIMIT 0, 25
eid ename eamount userid exstartdate exenddate paid reg
1 Bill 1 1000 # 2015-01-01 2015-11-01 no Yes
17 bill 17 300 # 2015-07-29 2015-07-29 no No
2 Bill 2 85 # 2013-11-01 2017-12-31 no Yes
6 Lunches 80 # 2015-01-01 2016-12-31 no Yes
我也想尝试这个:
3 Bill 3 87.00 1 Yes 2015-01-01 2016-05-01 no No
但除非我反转>和<,否则似乎无法做到 . 由于reg旗帜,账单1,2和午餐正在出现 .
我想知道这对PHP来说是否更好 .
编辑:为了澄清,我希望从表格中获取介于$ date1(在2015-07-25之上看到)和$ date2(2015-05-24)之间的所有项目 . 该表具有开始日期和结束日期,如果表中的日期包括$ date1和$ date2中列出的日期 .
因此,如果$ date1(2015-07-25)在exstartdate(2015-01-01)之后且$ date2(2015-08-24)在exenddate之前(2015-11-01)则显示结果 .
还显示exstartdate和exenddate是否在$ date1和$ date2之间 .
基本上,如果exstartdate和exenddate之间的日期也匹配$ date1和$ date2之间的日期,则显示结果 .
3 回答
您正在尝试查找
exstartdate
到extenddate
的间隔与're providing. The row that you'缺少的两个日期重叠的所有行无法匹配,因为一个间隔在另一个内部 . 你需要这样的东西:a
和b
是您的间隔开始和结束日期 . 你应该记住,即使有一千条记录,这些查询也可能非常慢 .根据你的描述你想要:
两个日期范围有一堆巨大的重叠案例 . 完全重叠,完全没有重叠,与各种前/后变化部分重叠 . 例如您在db中的字段是
a
和b
,并且您正在测试的日期范围是x
和y
:它变得丑陋,所以......你需要哪些情况?