2010-03-24 5 views
3

Ce code fonctionne très bien pour trouver une chambre disponible à une certaine date, mais cela ne fonctionne pas pour afficher une salle qui a été réservée et annuléeComment créer des conditions dans mysql (utilisation de 'if')?

L'hôtel dispose de 4 chambres et 1 d'entre eux a été réservé annulé Donc, même si je fais une annulation, la méthode select me donne 3 résultats. Peut-être parce que le second ET fonctionne toujours. Donc, en gros ce que je dois est

  1. vérifier si la chambre est réservée aux dates sélectionnées
  2. si elle a été réservé, vérifier si son annulation
  3. si elle a été annulée, ou non réservé afficher. Sinon, pas

 

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) ; 

J'ai essayé d'être aussi clair que possible, je serai là pour donner plus de détails si nécessaire

Répondre

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

Merci donc beaucoup!! cela fonctionne, et je pensais que je devrais essayer d'expliquer plus – Audel

0
  1. Une salle est occupée entre 2010-04-02 et 2010-04-04 si

    • quelqu'un doit être vérifié avant 2010-04-03
    • et que quelqu'un est de ne pas être vérifier avant 2010-04-02
    • et que room_booking n'est pas annulé.
  2. Une chambre est libre, quand il est pas occupé


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) 
    )  

Ce qui est exactement ce que Quassnoi dit avant moi .. :-) soupir

Questions connexes