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

Langage SQL Discussion :

Tester un chevauchement d'intervalle entre 2 dates


Sujet :

Langage SQL

  1. #1
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut Tester un chevauchement d'intervalle entre 2 dates
    Bonjour,

    pour la gestion des réservations d'un gîte, je souhaite tester si une demande de réservation est possible.
    Voici ma table simplifiée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE `reservation` (
      `id` mediumint(8) unsigned NOT NULL auto_increment,
      `date_debut` date NOT NULL,
      `date_fin` date NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci AUTO_INCREMENT=1;
    Quelques exemples de réservations enregistrées :
    1, 2007-01-01 à 2007-01-22
    2, 2007-01-30 à 2007-02-11
    3, 2007-03-03 à 2007-03-04

    Demande de réservation entre le 2007-01-20 et le 2007-02-02 rejetée car il y a la réservation n°1 et n°2
    Demande de réservation entre le 2007-03-01 et le 2007-03-12 rejetée car il y a la réservation n°3
    Demande de réservation entre le 2007-02-15 et le 2007-02-20 autorisée car aucune résa sur cette période.

    Donc, j'aimerais connaître le moyen de faire un SELECT me retournant le ou les réservations empêchant la demande.
    Merci d'avance et espérant une aide très précieuse...

    @+ bientôt !

  2. #2
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    j'ai bien regardé le prédicat OVERLAPS mais j'ai l'impression qu'il teste seulement le chevauchement de 2 périodes d'un même enregistrement... dite moi si je me trompe.

    Moi, j'aimerais qu'avec une date de début et une date de fin en paramètre, que la requête m'informe tout simplement si cette période n'est pas déjà prise !


  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 802
    Points
    30 802
    Par défaut
    Citation Envoyé par Tchupacabra
    j'ai bien regardé le prédicat OVERLAPS mais j'ai l'impression qu'il teste seulement le chevauchement de 2 périodes d'un même enregistrement... dites moi si je me trompe.
    En effet
    Moi, j'aimerais qu'avec une date de début et une date de fin en paramètre, que la requête m'informe tout simplement si cette période n'est pas déjà prise !
    Liste des réservation déjà prises pour la période donnée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select  *
    from    reservation
    where   (date_debut, date_fin) overlaps (:datedebut, :datefin)
    ;
    Créer la réservation si la période n'est pas déjà occupée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    insert into 
        reservation
        (date_debut, date_fin)
    values
        (:datedebut, :datefin)
    where   not exists 
            (   select  1
                from    reservation
                where   (date_debut, date_fin) overlaps (:datedebut, :datefin)
            )
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    Merci bien al1_24 !!!

    j'avais pas vu cette possibilité...
    effectivement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM reservation
    WHERE (date_debut, date_fin) OVERLAPS ('2007-03-01', '2007-03-31');
    permet de connaître tous les chevauchements de toutes les réservations par rapport à la période renseigné...

    Le problème est qu' OVERLAPS n'a pas l'air de fonctionner sous WAMP5. J'ai doit donc utiliser l'expression très longue fourni dans le (très bon) tutorial.

    Comment est-il possible de connaître si oui ou non un prédicat est utilisable dans un système tel que WAMP5 ?

    Merci d'avance

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 802
    Points
    30 802
    Par défaut
    Ce n'est pas WAMP qui est en cause mais MySQL, qui a encore du chemin à faire pour implémenter toutes les commandes de la norme SQL.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

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

Discussions similaires

  1. Durée - Intervalle entre 2 dates
    Par lilou77 dans le forum SQL
    Réponses: 5
    Dernier message: 27/03/2014, 10h57
  2. XUL/js Intervalle entre deux dates :(
    Par kreatik dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/03/2009, 13h38
  3. intervalle entre deux dates
    Par amazircool dans le forum Langage
    Réponses: 3
    Dernier message: 29/04/2008, 14h25
  4. Intervale entre deux dates
    Par ecirb dans le forum Collection et Stream
    Réponses: 20
    Dernier message: 26/03/2007, 09h21
  5. Intervalle entre deux dates
    Par ecirb dans le forum InfoPath
    Réponses: 15
    Dernier message: 22/03/2007, 10h39

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