我正在构建简单的预订表格。比方说,我想预订2015-07-12到2015-07-21的车。
在数据库中我们有记录,从2015-07-15到2015-07-20都有预留车(car_id 18)。
这是我的查询,检查是否有保留车:
SELECT * FROM `reservation` WHERE `reservation_from` <= '2015-07-12' AND `reservation_to` <= '2015-07-21' AND `car_id` = 18
经过查询,我得到了记录,已经预订了车。一切都很好。
现在,让我们说,我想从2015-07-09到2015-07-19预订车。
这一次,我得到了空洞的结果。但是有记录,这辆车从2015-07-15到2015-07-20保留!
我曾与<=
>=
运营商玩过,但没有运气。
是的,两列都是日期格式。
我缺少什么?如何获得此记录,已经在所选日期范围内预订了汽车?
是的,MySQL不是我最强的一面。 谢谢!
答案 0 :(得分:0)
您希望任何重叠,而不是完全重叠。所以逻辑是:
SELECT *
FROM `reservation`
WHERE `reservation_from` <= '2015-07-21' AND
`reservation_to` >= '2015-07-12' AND
`car_id` = 18;
也就是说,如果预订在期间结束之前开始并且在期间开始之后结束,则没有可用的汽车。
答案 1 :(得分:0)
使用以下查询:
SELECT *
FROM `reservation`
WHERE
`reservation_from` <= '2015-07-21' AND
`reservation_to` >= '2015-07-12' AND
`car_id` = 18;