2012-06-08 4 views
0

Я нахожусь на своем третьем решении, и все они производят те же результаты, что и все коттеджи в рамках арендной системы.Доступные даты с коттеджей Бронирование

Это должны быть только отображенные коттеджи, которые доступны и не забронированы или заблокированы.

Я делаю что-то неправильно с этими запросами?

Available Dates with Reservations и Date 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 используется для бронирования и зарезервированных дат. Block_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

Ваш второй запрос использует таблицу, называемую резервированием, - это опечатка для резервирования_данных? – 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

Спасибо, что настроили мой разум прямо. Я предположил, что вы уже избежали переменных = ( –

Смежные вопросы