php – 检查MySQL中的日期范围冲突

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 检查MySQL中的日期范围冲突脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在写一个酒店预订系统.经过大量的学习(包括堆栈溢出),我写了这个sql来找出免费房间:
SELECT
*
From room
WHERE
    room_id NOT IN (
        SELECT room_id
        From Bookings
        WHERE
                 checkin <= '$check_in'
            AND checkout >= '$check_out'
    )

但问题是它不考虑时间检查是12:00:00,结账时间是11:59:00

它还没有像日期范围那样提供正确的查询,如果我从15-18预订单个房间的号码是501.如果我再次运行查询17-19这个房间似乎是免费的,但实际上它应该是占据.

任何人都可以建议一个非常好的和有效的sql将获得准确的日期,以便预订系统不会发生冲突,因为系统将实际实施,所以错误将导致许多问题.

提前致谢

您遇到的问题是您的查询不够健壮.当您解决问题时,您拥有的是:

如果$check_in和$check_out定义的范围以任何方式与checkin和checkout定义的范围重叠,则会预订房间.否则,它是免费的.

这意味着:

>如果$check_in> = checkin和$check_in< = checkout,房间已预订
>或者如果$check_out> = checkin和$check_out< = checkout,房间已经预订
>或者如果$check_in< = checkin和$check_out> =结账,房间已经预订

因此,您需要在子查询中表示这两种方案,以便获取您正在查找的信息.

此外,您希望使用日期时间进行比较而不仅仅是时间,否则您将产生副作用.

编辑:SQL查询

(请记住,有一种方法可以给猫皮肤,可以这么说.我只是提供一个尽可能与你已经拥有的东西保持一致的例子.再一次,我也假设签到,checkout,$check_in和$check_out都将解析为datetime类型)

SELECT *
FROM room
WHERE room_id NOT IN
(SELECT room_id 
 FROM bookings
 WHERE
   (checkin <= '$check_in' AND checkout >= '$check_in') OR
   (checkin <= '$check_out' AND checkout >= '$check_out') OR
   (checkin >= '$check_in' AND checkout <= '$check_out'))

脚本宝典总结

以上是脚本宝典为你收集整理的php – 检查MySQL中的日期范围冲突全部内容,希望文章能够帮你解决php – 检查MySQL中的日期范围冲突所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。