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

前端之家收集整理的这篇文章主要介绍了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'))
原文链接:https://www.f2er.com/php/136798.html

猜你在找的PHP相关文章