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 :

Récupérer une liste des logements disponibles (non réservés)


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Récupérer une liste des logements disponibles (non réservés)
    Bonjour,

    Je me permets d'écrire sur ce forum car j'ai un problème MySql qui me laisse perplexe. J'ai une application où des utilisateurs peuvent réserver des logements en spécifiant une date d'arrivée et une date de sortie. Pendant cette période, le logement est défini comme étant indisponible.

    Le problème, c'est que je veux récupérer les logements qui sont disponibles sur une période donnée, par exemple du 01/07/2014 au 05/07/2014.
    Ça a l'air tout bête mais au final, c'est un peu tricky et je ne sais pas comment m'y prendre.

    Voici les requêtes pour le contexte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE Rental(id int);
    CREATE TABLE RentalReservation(id int, rental_id int, start_date date, end_date date);
     
    INSERT INTO Rental (id) VALUES (1);
    INSERT INTO RentalReservation (rental_id, start_date, end_date)
        VALUES
    (1, '2014-06-01', '2014-06-02'),
    (1, '2014-06-03', '2014-06-05'),
    (1, '2014-06-08', '2014-06-10');
    Toute aide sera appréciée.
    Merci d'avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,


    Regardez du côté de NOT EXISTS : http://sqlpro.developpez.com/cours/s...quetes/#L1.5.1

  3. #3
    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,

    Ça a l'air compliqué comme ça, de prime abord, mais c'est une problématique récurrente avec les SGBDR.

    Tu vas devoir utiliser une jointure externe (LEFT JOIN) entre la table Rental et la table RentalReservation en filtrant (dans la clause WHERE pas dans le ON) cette avec (start_date BETWEEN 01/07/2014 AND 05/07/2014) OR (end_date BETWEEN 01/07/2014 AND 05/07/2014).

    Et tu ne retiendras que les lignes de la jointure pour lesquelles RentalReservation.Rental_id 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)

  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
    En fait, il faut affiner le filtre parce que là ça ne tient pas compte des réservations qui couvriraient toute la période en commençant avant le 01/07/2014 et se terminant après le 05/07/2014.

    Mais tu vois l'idée. Là je n'ai pas le temps je suis en train de récolter le miel de printemps.
    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
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Voici un peu de lecture avec notamment une solution sans le prédicat overlaps proposée en fin du paragraphe 1.2.2

Discussions similaires

  1. Récupérer une liste des serveurs SQL Server de votre réseau
    Par Thomas Lebrun dans le forum Contribuez
    Réponses: 0
    Dernier message: 29/12/2010, 10h42
  2. Récupérer une liste des serveurs SQL Server de votre réseau
    Par Thomas Lebrun dans le forum Contribuez
    Réponses: 0
    Dernier message: 28/12/2010, 22h58
  3. Récupérer la liste des imprimantes disponibles
    Par Maluje dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 04/11/2008, 18h13
  4. récupérer la liste des noms des champs d'une table
    Par la_didise dans le forum Access
    Réponses: 2
    Dernier message: 29/05/2006, 16h55
  5. Comment récupérer la liste des logiciels installés sur une machine ?
    Par david_chardonnet dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 19/09/2003, 17h41

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