2012-06-08 44 views
0

我接觸到了我的第三個解決方案,它們都產生了與出租系統中所有別墅相同的結果。Cottage預訂的可用日期

它應該只顯示可用的並沒有預訂或封鎖的小屋。

我在做這些查詢有問題嗎?

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

這裏是我的三個TABL我有。出租有所有的小屋和細節,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

你的第二個查詢是使用一個名爲reservations的表 - 是否爲reservation_dates的拼寫錯誤? – andrewsi

+1

似乎查詢1應該返回到你想要的東西...除非我失去了明顯的東西 –

+0

這是一個錯字;只是注意到它並修復它。我確實嘗試了這兩種查詢,兩種都起作用,但都沒有給出我期待的結果。他們在顯示所有租金時忽略保留的租金。 – Tim

回答

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

+0

感謝您設定我的想法:)我假設你已經逃脫變數=( –