加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

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

发布时间:2021-03-07 02:44:08 所属栏目:MySql教程 来源:网络整理
导读:我有一些MYSQL的问题. 我需要能够检查假期房间是否已经预订了一段时间. 我的数据库使用DATETIME字段,如下所示: Database image link,as my rep is low 我有一个查询: SELECT * FROM `caravanavail1` WHERE (`checkIn` BETWEEN '2014-01-07 14:00:00' AND

我有一些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')

有时它有助于可视化:)

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读