2010-03-24 50 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我之前说的..叹息:-)