小屋预订的可用日期

时间:2012-06-08 13:38:12

标签: php mysql

我正在使用我的第三个解决方案,它们都会产生与租赁系统中所有小屋相同的结果。

应该只显示可用且未预订或封锁的小屋。

我是否对这些查询做错了什么?

Available Dates with ReservationsDate 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

1 个答案:

答案 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被忽略了。