gpt4 book ai didi

php - 使用 MYSQL 选择日期之间的行?

转载 作者:可可西里 更新时间:2023-11-01 07:00:23 25 4
gpt4 key购买 nike

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

我总是会传入两个日期,但有时这些日期可能会在很多方面发生冲突:

  1. 入住可能在另一个假期中间,而退房可能不会。
  2. 退房可能是在另一个假期的中间,而入住可能不是。
  3. 它们的日期可能与另一个假期相同。
  4. 我提供的入住和退房日期可能都在另一个预订中。

我已经为此绞尽脑汁好几天了,谁能帮我修复上面的 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 还指出的那样,这可以进一步简化:条件的所有入住时间之前您要预订的退房时间AND条件的所有退房时间都之后您的入住时间想预定

归结为:

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

有时它有助于形象化 :)

关于php - 使用 MYSQL 选择日期之间的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18700063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com