IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Problème avec une requête sur les dates


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Points : 92
    Points
    92
    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

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    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)

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Points : 92
    Points
    92
    Par défaut
    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

  4. #4
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    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)

  5. #5
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Points : 92
    Points
    92
    Par défaut
    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

  6. #6
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Tout cela me fait penser tant à la citation de Nicolas Boileau que Cinephil a apposée à sa signature
    « 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
    Bien poser le problème c'est le résoudre
    .Tu viens de nous faire passer de
    la requête doit me dire le nombre de chambres réservées entre deux dates choisies.
    à
    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)

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    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 Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  8. #8
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Points : 92
    Points
    92
    Par défaut
    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.
    Images attachées Images attachées
    • Type de fichier : pdf MLD.pdf (73,2 Ko, 111 affichages)

  9. #9
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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)

  10. #10
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Points : 92
    Points
    92
    Par défaut
    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.

  11. #11
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    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)

  12. #12
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Points : 92
    Points
    92
    Par défaut
    ok

    Je te remercie pour toutes ces informations

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête sur les dates futures plus une date passée
    Par yonn_b dans le forum Requêtes
    Réponses: 13
    Dernier message: 26/01/2012, 08h59
  2. Réponses: 16
    Dernier message: 03/06/2011, 00h53
  3. Problème avec une requête avec date
    Par WELCOMSMAIL dans le forum SQL
    Réponses: 6
    Dernier message: 29/05/2008, 13h36
  4. [C++B5]Problème avec une requëte SQL sur BDD ACCESS
    Par Sleeping Lionheart dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/04/2008, 09h03
  5. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 10h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo