2010-03-24 28 views
3

此代碼工作正常找到特定日期內的可用空間,但它不工作表明已經預訂和取消如何在mysql中創建條件(使用'if')?

的「酒店」有4間房間和他們的1房間已經訂滿了取消

所以即使我做了取消,select方法仍然給我3個結果。也許是因爲第二個AND仍在運行。所以基本上我需要的是

  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 2010-03-24 19:49:35

0
  1. 一間間佔據我將圍繞透露更多的細節2010-04-02 and 2010-04-04 if

    • 有人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我之前說的..嘆息:-)

相關問題