Bonjour à tous
J’ai un projet qui demande une bonne organisation au niveau sql et j’avoue que là je bloque un peu. Je vais essayer d’être le plus clair possible

.
Il s’agit d’un site répertoriant des hôtels et proposant une date de réservation. Il faut compter une bonne centaine d’hôtels inscrits sur le site.
L’utilisateur devra pouvoir rechercher l’hôtel de son choix selon plusieurs critères (localisation, prix maximum, dates de disponibilités etc.)
J’ai créé une première table "
Hotels" comprenant l’id de l’hôtel, son nom, sa situation géographique, un court descriptif, une photo… Chaque nouvelle entrée correspondant à un nouvel hôtel (il y aura donc une centaine d’entrée au commencement).
Comme un hôtel peut afficher des tarifs différents selon les dates et que ces dates peuvent être disponibles ou pas, à chaque nouvel hôtel enregistré sur le site, je crée une nouvelle table correspondant à l’établissement et que je nomme dateHotel1, dateHotel2 etc (en référence aux id des hôtels). Chaque entrée correspond à une date (du coup 365 entrées par an). Les champs de cette table sont
date,
tarif,
libre (à true ou false) et
idHotel (qui est toujours le même, mais c’est pour le besoin de ma seconde requête).
Là où ça se corse évidemment c’est dans la requête. Par exemple quand un internaute souhaite trouver un hôtel situé dans le sud, pour moins de 100 euros la nuit et qui soit libre du 1 au 5 décembre 2011, ça me donne un truc comme ça :
SELECT idHotel
FROM hotels
WHERE localisation='sud';
Je récupère donc les id dans un tableau et je crée une nouvelle requête grâce à ces id (pour l’exemple, j’ai pris les id 2, 7 et 10)
SELECT idHotel
FROM dateHotel2, dateHotel7, dateHotel10
WHERE date=01/12/2011 AND libre=true AND tarif<=100
date=02/12/2011 AND libre=true AND tarif<=100
date=03/12/2011 AND libre=true AND tarif<=100
date=04/12/2011 AND libre=true AND tarif<=100
date=05/12/2011 AND libre=true AND tarif<=100 ;
Ensuite je regarde dans mon tableau si certains id on été renvoyés 5 fois (le nombre de jours souhaités). Si c’est le cas je remonte l’hôtel correspondant à cet id depuis ma table hotels.
Voilà, je voulais un avis sur cette méthode qui me parait quand même un peu biscornue… Je m'en sors, mais c'est un peu laborieux et j'en ai peur, pas très optimal.
Merci par avance pour vos réactions !