我正在使用我的第三个解决方案,它们都会产生与租赁系统中所有小屋相同的结果。
应该只显示可用且未预订或封锁的小屋。
我是否对这些查询做错了什么?
Available Dates with Reservations和 Date Range for Reservations
从预约日期范围查询一个
SELECT *
FROM `rentals`
WHERE `rental_id` NOT IN (
SELECT `rental_id`
FROM `reservation_dates`
WHERE `end_date` >= $start AND `start_date` <= $end
)
在有预订的可用日期中查询二
SELECT *
FROM `rentals`
LEFT JOIN `reservation_dates` ON `reservation_dates.rental_id` = `rentals.rental_id`
WHERE (((`reservation_dates.end_date` NOT between $start AND $end) AND
(`reservation_dates.start_date` NOT between $start AND $end)) OR
(`reservation_dates.reservation_id` IS NULL)
)
这是我的三张桌子。出租有所有的小屋和细节,reservation_dates用于预订和保留日期,blocked_date是一个额外的表,以阻止日期,不能保留。我已经开始连接前两张桌子了,所有的小屋都应该抓住那些可用的小屋。看起来保留被忽略了。
Table 'rentals'
rental_id int
Table 'reservation_dates'
reservation_id int
rental_id int
start_date date
end_date date
Table 'blocked_dates'
blocked_id int
rental_id int
date_from date
date_to date
答案 0 :(得分:0)
我刚刚发现了问题所在。基于其他解决方案,我遵循他们的查询。当我将查询更改为以下布局时,它可以工作。
SELECT *
FROM `rentals`
WHERE `rental_id` NOT IN (
SELECT `rental_id`
FROM `reservation_dates`
WHERE `end_date` >= '".addslashes($date)."' AND `start_date` <= '".addslashes($end)."'
)
$ date和$ end被忽略了。