php – 使用MYSQL在日期之间选择行?

前端之家收集整理的这篇文章主要介绍了php – 使用MYSQL在日期之间选择行?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一些MysqL的问题.

我需要能够检查假期房间是否已经预订了一段时间.

我的数据库使用DATETIME字段,如下所示:

Database image link,as my rep is low

我有一个查询

SELECT * FROM `caravanavail1` 
WHERE (`checkIn` BETWEEN '2014-01-07 14:00:00' AND '2014-01-08 10:00:00') 
OR (`checkOut` BETWEEN '2014-01-07 14:00:00' AND '2014-01-08 10:00:00')

我将永远传递两个日期,但有时日期可能会在很多方面发生冲突:

> checkIn可能在另一个假期的中间,checkOut可能没有.
> checkOut可能在另一个假期的中间,checkIn可能没有.
>他们可能与另一个假期相同.
>我提供的checkIn和checkOut日期可能在另一个预订中.

我一直在摸不着头几天,任何人都可以帮我修复上面的sql代码(我更喜欢单个查询,而不是两个)来返回我需要的东西吗?

最佳答案
        |________|      // date to book
    |______|            // condition 1
              |______|  // condition 2
          |____|        // condition 3 
    |________________|  // condition 4

如果这4个条件中的任何一个导致连续,这意味着无法完成预订.

$in =  '2014-01-07 14:00:00';
$out = '2014-01-08 10:00:00';

SELECT * 
FROM `caravanavail1` 
WHERE 
  (`checkIn` <= '$in' AND `checkOut` <= '$out') // condition 1
  OR 
  (`checkIn` >= '$in' AND `checkOut` >= '$out')  // condition 2
  OR 
  (`checkIn` >= '$in' AND `checkOut` <= '$out') // condition 3
  OR 
  (`checkIn` <= '$in' AND `checkOut` >= '$out') // condition 4

正如Marc B也指出的那样,这可以进一步简化:
所有条件的签到时间都在您要预订的结账时间之前.所有条件的退房时间都在您要预订的入住时间之后

归结为:

SELECT * 
FROM `caravanavail1` 
WHERE 
  (`checkIn` < '$out' AND `checkOut` > '$in')

有时它有助于可视化:)

猜你在找的MySQL相关文章