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 :

Probleme requete interval date début- date fin pour réservation


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 1
    Points : 2
    Points
    2
    Par défaut Probleme requete interval date début- date fin pour réservation
    Je cherche à gérer des réservatons pour des biens immobiliers. Pour ce faire je dois vérifier qu'une nouvelle réservation (qui a une date de debut et une date de fin) n'entre pas en conflit avec un reservation existant deja ds ma table et correspondant a un bien (une reservation etant aussi définie par un id de bien)

    Voici la structure de ma table:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    -- 
    -- Structure de la table `reservation`
    -- 
     
    CREATE TABLE `reservation` (
      `id` int(7) NOT NULL auto_increment COMMENT 'id de la reservation',
      `dd` date default NULL COMMENT 'date debut reservation',
      `df` date default NULL COMMENT 'date fin reservation',
      `b_id` int(7) default NULL COMMENT 'id de la villa correspondant a la reservation',
      `util_id` int(7) default NULL COMMENT 'id du client correspondant a la reservation',
      `confirm` tinyint(1) NOT NULL default '0',
      PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=60 ;
     
    -- 
    -- Contenu de la table `reservation`
    -- 
     
    INSERT INTO `reservation` (`id`, `dd`, `df`, `b_id`, `util_id`, `confirm`) VALUES 
    (1, '2007-02-17', '2007-02-24', 1, NULL, 0),
    (2, '2007-02-02', '2007-02-10', 1, NULL, 0),
    (59, '2007-02-02', '2007-02-10', 2, NULL, 0);

    Et ma requete qui "soit disant devait me permettre de vérifier qu un interval de temps pour une reservation (et donc pr un bien immo) n'entrait pas en conflit avec une reservation existante correspondant à ce meme bien"


    Exemple:
    Je veux rentrer une nouvelle réservation avec date debut= '2007-02-11' et
    date fin '2007-02-17' qui concerne le bien 2 (b_id=2). Je dois donc avoir en sortie aucun résultat car je fais un tri sur l'id du bien. Pourtant en sortie j'ai un résultat qui concern le bien n°1. Donc voilà impossible de vérifier à une vérification correcte avant insertion. Je sais que ma requête est bizarroide et que j'ai du me faire des chaussettes.

    Requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT * FROM reservation 
    WHERE '2007-02-11' BETWEEN dd AND df 
    OR '2007-02-17' BETWEEN dd AND df 
    OR dd BETWEEN '2007-02-11' AND '2007-02-17' 
    AND df BETWEEN '2007-02-11' AND '2007-02-17' 
    AND b_id =2 LIMIT 0 , 30
    Si quelqu'un à la gentilesse de tester mon exemple ou une idée concernant la requete ou la structure de la table je suis preneur.

    Merci.

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 737
    Points
    11 737
    Par défaut
    Si tu veux tester le recouvrement de deux périodes finies définies par [deb1, fin1] et [deb2, fin2], la condition est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    deb1 <= fin2 AND fin1 >= deb2
    Dans ton cas, ça donne donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dd <= '2007-02-17' AND df > '2007-02-11'

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/01/2014, 17h21
  2. [AC-2003] requete sql demandant dates début et fin?
    Par kinkon dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 29/09/2011, 19h18
  3. Dates début et fin pour chaque semaine d'un mois.
    Par smailhop dans le forum VB.NET
    Réponses: 3
    Dernier message: 09/12/2009, 16h45
  4. Formulaire date début date fin pour Etat
    Par jackyhilary dans le forum IHM
    Réponses: 3
    Dernier message: 12/07/2007, 10h09
  5. Requête par Date Début Date Fin
    Par dddodo dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 20/12/2006, 10h45

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