2010-03-24 6 views
3

Этот код отлично подходит для того, чтобы найти номер в определенное время, но он не работает, чтобы показать номер, который был забронирован и отменен.Как создать условия в mysql (использование 'if')?

«Отель» имеет 4 номера и 1 из них забронировали отмененный

Так что, даже если я сделаю отмену, метод select продолжает давать мне 3 результата. Может быть, потому что второй И все еще работает. Поэтому в основном то, что мне нужно

  1. проверить, если номер забронирован на выбранные даты
  2. , если он был забронирован, проверить, если его отменили
  3. , если оно было отменено, или не забронированы дисплей его. В противном случае не

 

SELECT RoomNo, NightCost 
FROM room, room_types, booking 
WHERE typeid = fk1_typeid 
and double_bed=1 
and single_bed=0 
AND canceled = '1' in 
    (SELECT canceled 
    from booking, room_booking 
    where bookingid = fk2_bookingid) 
AND RoomNo not in 
    (SELECT fk1_RoomNo 
    FROM room_booking 
    WHERE '2010-04-02' between Check_in 
    and Check_Out or 
    '2010-04-03' between Check_in 
    and Check_Out) ; 

Я старался быть как можно более четкими, я буду вокруг, чтобы дать более подробную информацию, если это необходимо

ответ

2
SELECT * 
FROM room 
JOIN room_types 
ON  typeid = fk1_typeid 
WHERE double_bed = 1 
     AND single_bed = 0 
     AND roomNo NOT IN 
     (
     SELECT fk1_roomno 
     FROM room_booking 
     WHERE check_out >= '2010-04-02' 
       AND check_in <= '2010-04-03' 
       AND NOT canceled 
     ) 
+0

спасибо много !! он работает, и я думал, что мне нужно будет попытаться объяснить больше – Audel

0
  1. Комната занята между 2010-04-02 и 2010-04-04, если

    • кто-то должен быть зафиксирован перед 2010-04-03
    • и что кто-то не будет проверить, прежде 2010-04-02
    • и room_booking не отменяется.
  2. Комната свободна, когда она не занята


SELECT R.RoomNo, R.NightCost 
    FROM room as R 
    JOIN room_types as RT ON RT.typeid = R.fk1_typeid 
WHERE (R.single_bed=0 and R.double_bed=1) 
    AND R.roomNo NOT IN (
     SELECT RB.fk1_roomno 
      FROM room_booking as RB 
     WHERE (RB.check_out >= '2010-04-02') 
      AND (RB.check_in <= '2010-04-03') 
      AND NOT (RB.canceled=1) 
    )  

Какие именно то, что сказал Quassnoi передо мной .. Вздох :-)

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