我正在使用我的第三个解决方案,它们都产生了与租赁系统中的所有小屋相同的结果。
应该只展示可用且未被预订或封锁的小屋。
我对这些查询做错了吗?
从日期范围查询一以进行预订
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)
)
这是我的三张桌子。Rentals 包含所有小屋和详细信息,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