2015-03-02 2 views
0

Я пытаюсь запустить запрос, чтобы вытащить доступные комнаты, и он присоединяется к таблице резервирования, чтобы увидеть доступные комнаты за определенный период (дата начала и окончания). Я рисую пробел здесь, и я думаю, что это довольно простой запрос, я просто не могу придумать, как его создать.Mysql: Сравнение дат и присоединение

То, что я до сих пор, что должно быть исправлено

SELECT * 
    FROM room 
LEFT JOIN reservation ON room.id = reservation.room_id 
    WHERE reservation.id is null or 
      :startdate > reservation.enddate or 
      :enddate < reservation.startdate 

Мой выше запрос будет возвращать результаты для помещений с несколькими оговорками, которые могут удовлетворить ИНЕКЕ хотя может быть резервирование в пределах диапазона дат.

ответ

1

Я хотел бы сделать это, используя not exists предикат, который я нахожу интуитивно:

SELECT * 
FROM room 
WHERE NOT EXISTS (
    SELECT * 
    FROM reservation 
    WHERE room.id = room_id 
    AND 
     :startdate < enddate 
    AND 
     startdate < :enddate) 

Логика говорит вернуть все номера, для которых не существует каких-либо связанных с ними оговорок между указанными датами.

+0

Я не думал использовать предикат «не существует», но этот запрос по-прежнему будет возвращать комнату с несколькими резервированиями, и один удовлетворяет условию where, даже если резервирование может конфликтовать с данными датами начала и окончания. – Ralph

+0

@Ralph О, верно, кажется, у меня логика неправильная ... повесить на – jpw

+0

@Ralph Должно быть правильно сейчас, я думаю. – jpw

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