Requête complexe pour réservation.

Petit nouveau ! | 1 Messages

09 mai 2011, 21:26

Bonjour,

Je crée actuellement un projet codé en VB NET, mais je permet de poster ici mon pb n'étant pas en VB mais belle et bien en SQL.
Ce projet consiste en la gestion d'un hôtel.

Je souhaite afficher toutes les chambres disponibles dans une période choisie par l'utilisateur.

voici le début pour que vous compreniez mon problème :
SELECT id_chambre, nom_chambre FROM Chambres
INNER JOIN Reservations ON Chambres.id_chambre=Reservations.id_chambre
WHERE ...

C'est le WHERE qui me pose problème !
Quels sont les test à effectuer pour que les chambres réservées pendant cette période, ne soit pas prises en compte...

Voici la structure de mes 2 tables concernées :

CHAMBRES[
id_cham
num_cham
nom_cham
super_cham
descr_cham
...
]

RESERVATIONS[
id_reserv
id_chambre
id_client
date_deb_reserv
date_fin_reserv
...
]

et ensuite dans l'interface deux dates sont choisis : (champs calendrier en VB NET)
-calendDu.value
-calendAu.value

Voila...donc ma question concerne "l'organisation" de tout cela pour que ça fonctionne correctement.

On comprend bien si le client recherche du 13/05 au 21/05, mais qu'une réservation cours dans une chambre du 10/05 au 15/05, et bien on n'affichera pas cette chambre...

Faut -il utiliser des opérateurs de compraisons ?
Vraiment merci de m'aider !


Calixte

ViPHP
ViPHP | 2577 Messages

10 mai 2011, 08:37

Bonjour,
SELECT id_chambre, nom_chambre FROM Chambres
RIGHT JOIN Reservations ON Chambres.id_chambre=Reservations.id_chambre and $DFIN > date_debut and date_fin > $DBEB where id_chambre = null
Voilà la requete que j'essayerai, mais je suis un noob en JOIN
$DDEB et $DFIN plage de dates de la réservation souhaitée
date_debut et date_fin plage de dates dans la table

Le RIGHT permet d'avoir les chambres sans résevation et celle avec réservation
Le ON permet de faire la jointure avec les réservations qui sont dans la période
Le id_chambre = null permet de sélectionner les chambres sans réservation

La syntaxe est approximative et j'ai un doute entre RIGHT/LEFT mais je suis presque sur de la logique.

Petit nouveau ! | 1 Messages

11 mai 2011, 16:43

Bonjour,
Il faut 4 filtres (une par date) pour vérifier si les 2 intervalles de dates ne se croisent pas.
Pour la requête complète et plus, n'hésite pas à poser ta question sur decisionnel.ning.com