2010-11-11 5 views
0

J'ai deux tables associées (schéma simplifié)Inscrivez-vous sur autre table avec plage de dates ayant le nombre 0

mysql> describe booking; 
+----------------+------------+ 
| Field   | Type  | 
+----------------+------------+ 
| id    | int(11) | 
| room_id  | int(11) | 
| date_from  | date  | 
| date_to  | date  | 
+----------------+------------+ 

mysql> describe room;  
+-------------+------------+ 
| Field  | Type  | 
+-------------+------------+ 
| id   | int(11) | 
| isDouble | tinyint(1) | 
+-------------+------------+ 

Ce que je dois faire est d'obtenir tous les deux (isDouble = true) chambres qui ne sont pas réservés au cours période spécifiée (date_from, date_to) de l'heure. Je voudrais obtenir le résultat dans une requête.

Merci pour votre aide.

Répondre

3

essayer:

Select Distinct id RoomId 
From room r 
Where isDouble = 1 
And Not Exists 
    (Select * From booking 
    Where room_id = r.id 
     And date_from <= @EndDateRange 
     And date_to >= @StartDateRange) 
+0

Votre détection de plage de dates est plus élégant, +1 – zerkms

+0

Merci, consultez http://stackoverflow.com/questions/325933/ déterminer-si-deux-dates-plages-chevauchent/325964 # 325964 –

+0

Hehe, cela explique tout ;-) – zerkms

0

Essayez ceci: SELECT * FROM room WHERE isDouble = 1 AND id NOT IN (SELECT room_id FROM booking WHERE date_to BETWEEN 'date1' AND 'date2')

1
SELECT * 
    FROM room r 
WHERE r.isDouble 
    AND NOT EXISTS (SELECT NULL 
        FROM booking b 
        WHERE (date_from BETWEEN 'date1' AND 'date2' 
         OR date_to BETWEEN 'date1' AND 'date2') 
         AND b.room_id = r.id) 
Questions connexes