首页 文章

如果日期在表中的现有日期之间,则为Mysql

提问于
浏览
0

我正在尝试列出两个日期之间的所有内容,包括那些在特定日期之前和之后具有开始日期和结束日期的项目 .

例:

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 回答

  • 0

    您正在尝试查找 exstartdateextenddate 的间隔与're providing. The row that you'缺少的两个日期重叠的所有行无法匹配,因为一个间隔在另一个内部 . 你需要这样的东西:

    WHERE
    exstartdate BETWEEN a AND b
    OR
    exenddate BETWEEN a AND b
    OR
    (exstartdate <= a AND exenddate >= b)
    

    ab 是您的间隔开始和结束日期 . 你应该记住,即使有一千条记录,这些查询也可能非常慢 .

  • 0

    根据你的描述你想要:

    SELECT * FROM expenses 
    WHERE userid = '#' AND 
        ((exstartdate >= '2015-07-25' AND exenddate <= '2015-08-24') OR 
         (exstartdate < '2015-07-25' AND exenddate > '2015-08-24') OR 
         reg='Yes') 
    ORDER BY eamount DESC LIMIT 0, 25
    
  • 0

    两个日期范围有一堆巨大的重叠案例 . 完全重叠,完全没有重叠,与各种前/后变化部分重叠 . 例如您在db中的字段是 ab ,并且您正在测试的日期范围是 xy

    a    b
    x y              - simple, no overlap at all
               x y   - simple, no overlap at all
    x   y            - x outside, y inside/on
    x     y          - x outside, y inside/on
    x        y       - x outside, y inside/on
    x           y    - complete overlap
        x       y    - y outside, x inside/on
          x     y    - y outside, x inside/on
             x  y    - y outside, x inside/on
       xy            - x = y = a
             xy      - x = y = b
          xy         - complete overlap
    

    它变得丑陋,所以......你需要哪些情况?

相关问题