0

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

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

我对这些查询做错了吗?

可预订日期和预订日期 范围

从日期范围查询一以进行预订

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
4

1 回答 1

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

于 2012-06-08T14:43:41.583 回答