Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/07/2011, 02h52   #1
Membre du Club
 
Michael Di Blasio
Étudiant
Inscription : mai 2008
Messages : 138
Détails du profil
Informations personnelles :
Nom : Michael Di Blasio

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2008
Messages : 138
Points : 49
Points : 49
Par défaut Problème avec une requête sur les dates

Bonjour à tous

Pour un travail d’étude je dois gérer des chambres d’hôtel (réservation). Dans ma table réservation, j'ai une date de début (DateDebut) de type date et une date de fin (DateFin) de type Date.

Mon souci est dans la requête qui doit me dire le nombre de chambres réservées entre deux dates choisies.

J'ai essayé avec le between pour la date de début et de fin, mais ça ne correspond pas. Si une chambre est réservée avec une date début qui se trouve pas les dates du between mais qui est réservée durant l'espace de temps voulu ne s'affiche pas.

J'ai essayé avec le <= à une date et le >= à une date pour la date début et la date fin, identique que précédemment ça ne fonctionne pas correctement.

Il y aurait une autre manière de faire avec d'autres commandes où la structure des date de début et date de fin pour les réservations est fausse pour une tel requête

Je vous remercie par avance de l'aide que vous allez m'apporter

Di Blasio Michael
diblasio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2011, 06h59   #2
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 530
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

Informations professionnelles :
Activité : Retraité
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : novembre 2005
Messages : 2 530
Points : 3 523
Points : 3 523
Saluton,
Ton exposé n'est pas assez précis.
Plusieurs cas se présentent pour une chambre.
  1. Soit elle n'est louée pour aucune période entre ces deux dates,
  2. Soit elle est louée pour toute la période, en une fois ou plusieurs fois successives et consécutives,
  3. Soit elle est louée pour une ou des parties de la période non consécutives,
  4. Soit elle est louée avant le début de la période et libérée avant la fin de la période,
  5. Soit elle est louée après le début de la période et libérée après la fin de la période,
  6. et d'autres cas encore, panachage de certains des cas précédents.
Il faudrait donc nous préciser les empans minimum et maximum d'une location, par exemple.
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2011, 10h09   #3
Membre du Club
 
Michael Di Blasio
Étudiant
Inscription : mai 2008
Messages : 138
Détails du profil
Informations personnelles :
Nom : Michael Di Blasio

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2008
Messages : 138
Points : 49
Points : 49
Salut,

Tout à fait, les points exposés ci-dessus sont tout à fait justes. Et c'est ceci que je n'arrive pas à résoudre dans la requête. C'est possible que certains ne puissent pas être résolus avec la structure de la table que j'ai date début et fin.

Tu voudrais plus de précision mais je n'ai pas compris ce que voulais dire avec les empans minimum et maximum d'une location.

Merci
diblasio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2011, 10h41   #4
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 530
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

Informations professionnelles :
Activité : Retraité
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : novembre 2005
Messages : 2 530
Points : 3 523
Points : 3 523
Citation:
Envoyé par diblasio Voir le message
je n'ai pas compris ce que voulais dire avec les empans minimum et maximum d'une location
Considèrons ici empan comme un synonyme de durée.
Ce qu'il faut nous préciser est donc si une location peut intervenir pour une durée inférieure à une journée (matinée, jour, nuit), les horaires des locations (d'aujourd'hui 10h AM à demain 9:59 AM, par exemple) car dans ce cas on est à cheval sur deux dates.
D'autre part si l'on veut connaître le nombres de chambres louées sur une période, veut-on connaître seulement le nombre de chambres louées ou le nombre de jours de locations, si une chambre est louée plusieurs fois sur la période doit-elle être comptabilisée plusieurs fois ? Etc, etc ...
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2011, 10h41   #5
Membre du Club
 
Michael Di Blasio
Étudiant
Inscription : mai 2008
Messages : 138
Détails du profil
Informations personnelles :
Nom : Michael Di Blasio

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2008
Messages : 138
Points : 49
Points : 49
Le but de l'exercice est de savoir s'il y a encore des chambres de libres durant la période demandée.

Les chambres sont louées à la journée. Exemple : si elle se libère le 6.08.2011 et que je recherche pour cette date. Moi je dois recevoir l'info comme si elle était louée. Car dans mon exercice, je ne gère pas le service de nettoyage, donc je ne peux pas savoir après combien de temps effectivement elle est disponible.

Donc, pour chaque type de chambre (simple, double,etc), j'ai le nombre de chambres disponibles. L’établissement fait les réservations et moi avec cette base de données je dois pouvoir savoir si, par exemple du 2.08.2011 au 6.08.2011, il reste une chambre double de libre.



J'espère que c'est cela que tu me demandais

Merci
diblasio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2011, 11h06   #6
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 530
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

Informations professionnelles :
Activité : Retraité
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : novembre 2005
Messages : 2 530
Points : 3 523
Points : 3 523
Tout cela me fait penser tant à la citation de Nicolas Boileau que Cinephil a apposée à sa signature
Citation:
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
.Qu'à l'adage de Dédé, mon maître à penser
Citation:
Bien poser le problème c'est le résoudre
.Tu viens de nous faire passer de
Citation:
la requête doit me dire le nombre de chambres réservées entre deux dates choisies.
à
Citation:
Le but de l'exercice est de savoir si il y a encore des chambres libres durant la période considérée.
Et encore en ai-je rectifié l'orthographe, la grammaire et la syntaxe.
Il te faut absolument commencer par faire de gros efforts pour t'exprimer avec précision si tu veux avoir une chance d'être compris de tes interlocuteurs.
Tu te rends bien compte que ta demande finale est, en logique, à l'exact opposé de ta demande initiale, non ?
Demeure une question, veut-on savoir quelles chambres sont totalement libres pour la période considérée ou, également celles qui offrent des créneaux de disponibilité pendant ladite période ?
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/07/2011, 17h18   #7
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 021
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 021
Points : 18 305
Points : 18 305
Envoyer un message via MSN à CinePhil
Un cas similaire d'il y a deux jours dans cette discussion et j'y donne la solution au message 5.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2011, 18h53   #8
Membre du Club
 
Michael Di Blasio
Étudiant
Inscription : mai 2008
Messages : 138
Détails du profil
Informations personnelles :
Nom : Michael Di Blasio

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2008
Messages : 138
Points : 49
Points : 49
Je te remercie cinephil. Je vais regarder ce que ça donne.

Ce que tu dis Maljuna Kris est tout à fait vrai. Revenons au modèle.

Mon exercice consiste à une gestion de plusieurs établissements hôteliers.

Je dois faire une application web qui me permet de savoir quel établissement hôtelier dispose de chambres de tel type durant une durée donnée.

Exemple: je veux savoir quel établissement dispose d'une chambre matrimoniale du 8.08.2011 au 15.08.2011.

A ce stade, mon application devrait me donner la liste de tous les établissements ayant ce type de chambre libre durant cette période.

Pour pouvoir gérer les chambres libres, je dois savoir celle qui sont occupées et pour cela j'utilise une table Reservation avec une date de début (DateDebut) et une date de fin (DateFin).

Mon souci est de pouvoir gérer les cas dont tu me fais part dans ton post ci-dessus
  • Soit elle n'est louée pour aucune période entre ces deux dates,
  • Soit elle est louée pour toute la période, en une fois ou plusieurs fois successives et consécutives
,
  • Soit elle est louée pour une ou des parties de la période non consécutives,
  • Soit elle est louée avant le début de la période et libérée avant la fin de la période,
  • Soit elle est louée après le début de la période et libérée après la fin de la période,

Est-ce possible de pouvoir gérer ces différentes variantes avec une date de début et une date de fin, comme je le fais ou il faut que je le gère différemment ?

Je vous remercie encore pour toute votre aide

J'espère que je suis assez clair dans mes explications
Je mets mon modèle en lien.
Fichiers attachés
Type de fichier : pdf MLD.pdf (73,2 Ko, 5 affichages)
diblasio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2011, 07h41   #9
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 530
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

Informations professionnelles :
Activité : Retraité
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : novembre 2005
Messages : 2 530
Points : 3 523
Points : 3 523
Concernant le schéma de ta base de données je dirais que la relation "effectuer" entre la table établissements et la table réservations n'a d'intérêt que si une réservation dans un établissement peut être effectuée par un autre établissement.
La colonne NbreChambre, si elle correspond au numéro de la chambre, est mal nommée.
S'agissant de ton problème on peut le reformuler plus simplement.
Quelles sont les chambres de tel type pour lesquelles il n'existe pas de réservation pour la période considérée.
Pour ce faire il faut commencer par filtrer la table chambres sur le type de chambre (paramètre externe à la requête) puis faire une jointure externe avec la table réservations pour toutes les réservations de ces chambres dont la date de début est inférieure ou égale à la date de fin de la période (paramètre externe) et la date de fin supérieure ou égale à la date de début de la période(paramètre externe).
Les chambres pour lesquelles la jointure retourne NULL seront totalement disponibles pour la période.
Ce qui peut nous donner la requête suvante
Code MySQL :
1
2
3
4
5
6
7
8
9
10
SELECT IdEtablissement, Nom, NbreChambre
FROM Chambres
INNER JOIN Etablissements
    ON IdEtablissement=Ref_IdEtablissement
LEFT JOIN Reservations 
    ON Ref_IdChambre=IdChambre
     AND DateDebut <= ? (FinPeriode)
     AND DateFin >= ? (DebPeriode)
WHERE Ref_IdTypeChambre= ?
    AND Ref_IdChambre IS NULL
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2011, 09h36   #10
Membre du Club
 
Michael Di Blasio
Étudiant
Inscription : mai 2008
Messages : 138
Détails du profil
Informations personnelles :
Nom : Michael Di Blasio

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2008
Messages : 138
Points : 49
Points : 49
Excusez-moi pour ce silence, je suis parti quelques jours en vacances.

Salut,

Un grand merci à toi Maljuna Kris pour ces informations bien précieuses.

Pour NbreChambres, ce n'est pas le no de la chambre mais le nombre de chambres de ce type dont dispose l’établissement.

Comme tu le dis ci-dessus, une réservation pour l’établissement x ne peux être enregistrée que par l'établissement x.

Par contre, je ne comprends pas pourquoi la relation n'a d'intérêt que si une réservation dans un établissement peut être effectuée par un autre établissement.

Si je supprime cette relation, quand un établissement ajoute une réservation, je ne peux pas savoir quel établissement a inséré cette réservation.
diblasio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2011, 10h54   #11
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 530
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

Informations professionnelles :
Activité : Retraité
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : novembre 2005
Messages : 2 530
Points : 3 523
Points : 3 523
Citation:
Envoyé par diblasio Voir le message
Pour NbreChambres, ce n'est pas le no de la chambre mais le nombre de chambres de ce type dont dispose l’établissement.
Quel intérêt de stocker cette info calculable dans la base de données ?
Citation:
Envoyé par diblasio Voir le message
Comme tu le dis ci-dessus, une réservation pour l’établissement x ne peux être enregistrer que par l'établissement x.

Par contre je ne comprend pas pourquoi la relation n'a d'intérêt que si une réservation dans un établissement peut être effectuée par un autre établissement.

Ci je supprime cette relation, quand un établissement ajoute une réservation, je ne peux pas savoir quel établissement à insérer cette réservation.
Puisqu'une réservation d'une chambre d'un établissement ne peut être faite que par ce même établissement, il ne doit pas être trop difficile, par jointure avec la table chambres, de retrouver l'établissement.
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2011, 16h00   #12
Membre du Club
 
Michael Di Blasio
Étudiant
Inscription : mai 2008
Messages : 138
Détails du profil
Informations personnelles :
Nom : Michael Di Blasio

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2008
Messages : 138
Points : 49
Points : 49
ok

Je te remercie pour toutes ces informations
diblasio est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h30.


 
 
 
 
Partenaires

Hébergement Web