0

私は 3 番目のソリューションに取り組んでおり、それらはすべて、レンタル システム内のすべてのコテージと同じ結果をもたらします。

利用可能で、予約されていない、またはブロックされていないコテージのみを表示する必要があります。

これらのクエリで何か問題がありますか?

予約可能日と 予約可能な期間

予約の日付範囲から 1 つをクエリ

SELECT *
FROM `rentals`
WHERE `rental_id` NOT IN (
  SELECT `rental_id`
  FROM `reservation_dates`
  WHERE `end_date` >= $start AND `start_date` <= $end
)

予約可能な日付から 2 つをクエリする

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)
)

これが私が持っている3つのテーブルです。Rentals には、すべてのコテージと詳細が含まれています。reservation_dates は、予約と日付の予約に使用されます。blocked_date は、予約できない日付をブロックする追加のテーブルです。私は最初の 2 つのテーブルを接続することから始めました。使用可能なものを取得する必要があるときに、すべてのコテージを取得しています。予約は無視されているようです。

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 に答える