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,房间已预订 因此,您需要在子查询中表示这两种方案,以便获取您正在查找的信息. 此外,您希望使用日期时间进行比较而不仅仅是时间,否则您将产生副作用. 编辑: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')) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |