2014-05-09 5 views
0

Je rencontre des problèmes lors de la création d'une requête SQL.Requête SQL imbriquée - problème logique

Dans ma base de données, j'ai deux tables, les chambres et les réservations et les tables sont structurées comme ça:

Tableau: chambres

roomID : int (PK, auto increment, unique) 
description : varchar 
capacity : int 

Tableau: réservations

resID : int (PK, auto increment, unique) 
roomID : int (FK) 
date : date 
beginning : time 
end : time 

Maintenant, je me demande s'il est possible de créer une requête, qui retourne un lis t des chambres concernant certains arguments passés. Il ne devrait pas y avoir deux réservations ou plus pour une chambre en même temps.

En clair la requête serait quelque chose comme:

SELECT description from rooms 
WHERE capacity is greater or equal to :passedCapacity 
AND date not equal to :passedDate 
OR date is equal to :passedDate BUT 
:passedBeginning and :passedEnd do not collide with other reservations 

Je ne sais pas comment faire.

Je vous serais très reconnaissant pour toute aide.

Merci d'avance!

+2

Quelle base de données utilisez-vous, MySQL ou SQL Server? –

+0

J'utilise la base de données MySQL. – user3006108

Répondre

0

Si vous voulez trouver toutes les réservations qui se chevauchent, alors vous aurez besoin d'une sorte de join. Vous pouvez cependant faire avec une clause exists, comme dans:

select r.* 
from reservations r 
where exists (select 1 
       from reservations r2 
       where r2.roomId = r.roomId and 
        r2.date = r.date 
        r2.resid <> r.resid and 
        r2.beginning < r.end and 
        r2.end > r.beginning 
      ); 

Il utilise la logique que deux périodes se chevauchent lorsque la première commence avant la seconde extrémités et les premières extrémités après la seconde commence.

+0

Merci Gordon, fonctionne parfaitement! – user3006108