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 :

Dispo des chambres selon date_debut et date_fin


Sujet :

Langage SQL

  1. #1
    Membre du Club Avatar de kreatik
    Inscrit en
    Juin 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 94
    Points : 62
    Points
    62
    Par défaut Dispo des chambres selon date_debut et date_fin
    'soir

    Je me prend la tête sur une requête de réservation hôtelière Explications :

    • Selon deux colonnes date_debut et date_fin pouvoir vérifier si une chambre donnée peut être réservée selon une période.
    • Les arrivées (date_debut) se font après midi et les départs (date_fin) avant midi.
    • Une chambre peut être réservée pour la journée ou quelques heures ce qui donne dans la base pour la journée du 10 juillet 2009 date_debut : 2009-07-10 et date_fin : 2009-07-10.


    Pour infos mais ça ne sert pas à grand chose, voila ce que j'ai actuellement et qui en fonctionne pas correctement :

    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
    23
    24
    25
    26
    27
    28
    SET @var_date_debut = '2009-05-23';
    SET @var_date_fin = '2009-05-25';
     
    SELECT * 
    FROM `reservations` 
    WHERE `chambre` =26
    AND (
         @var_date_debut 
         BETWEEN reservations.date_debut
         AND reservations.date_fin
         OR @var_date_fin 
         BETWEEN reservations.date_debut
         AND reservations.date_fin
         OR reservations.date_debut
         BETWEEN @var_date_debut 
         AND @var_date_fin 
         OR reservations.date_fin
         BETWEEN @var_date_debut 
         AND @var_date_fin 
    )
    AND (
         (  @var_date_fin != date_debut   AND (  @var_date_debut != date_debut  AND @var_date_fin != date_fin  ) )
    XOR (
         (
              ( @var_date_debut = date_debut  AND @var_date_fin = date_fin )    XOR @var_date_debut = date_debut 
         )
    )
    )
    Structure db :
    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
    --
    -- Structure de la table `reservations`
    --
     
    CREATE TABLE IF NOT EXISTS `reservations` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `id_client` int(11) DEFAULT NULL,
      `chambre` smallint(2) NOT NULL,
      `nb_adultes` int(11) DEFAULT NULL,
      `nb_enfants` int(11) DEFAULT NULL,
      `date_debut` date NOT NULL,
      `date_fin` date NOT NULL,
      PRIMARY KEY (`id`),
      KEY `id_client` (`id_client`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2626 ;
    Un peu de contenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    --
    -- Contenu de la table `reservations`
    --
     
    INSERT INTO `reservations` (`id`, `id_client`, `chambre`, `nb_adultes`, `nb_enfants`, `date_debut`, `date_fin`) VALUES
    (2625, NULL, 26, NULL, NULL, '2009-06-06', '2009-06-09'),
    (2621, NULL, 26, NULL, NULL, '2009-06-01', '2009-06-02'),
    (2619, NULL, 26, NULL, NULL, '2009-06-02', '2009-06-05'),
    (2611, NULL, 26, NULL, NULL, '2009-05-30', '2009-05-31'),
    (2607, NULL, 26, NULL, NULL, '2009-05-29', '2009-05-29');
    please need help


  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 739
    Points : 52 451
    Points
    52 451
    Billets dans le blog
    5
    Par défaut
    Le principe est de faire :
    WHERE la chambre est libre pour la date de début et la date de fin
    AND il n'existe pas (NOT EXISTS) de date entre le début et la fin de réservation pour laquelle une réservation a été faite pour cette chambre.

    Mais sans la description de vos table sous forme DDL, il est difficile de vous montrer une telle requête. Merci de lire la charte de postage et de l'appliquer.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre du Club Avatar de kreatik
    Inscrit en
    Juin 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 94
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    (ok, 1er message édité désolé)

    Edit 5 : j'ai effacé la requête elle ne fonctionnait pas très bien non plus, une idée ??


  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 24
    Points : 25
    Points
    25
    Par défaut
    En gros tu peux tester comme ça :


    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
     
    --Avec comme paramètres:
    @chambre
    @TaDateDebut
    @TaDateFin
     
    IF EXISTS (
    select null from reservations 
    where 
    @chambre=chambre AND(
     
    --ta Date finale dans une réservation
    (@TaDateFin<dateFin AND @TaDateFin>dateDebut)OR
     
    --ta Date de début dans une réservation
    (@TaDateDebut<dateFin AND @TaDateDebut>dateDebut)OR
     
    --Réservation englobe une autre
    (@TaDateDebut>dateDebut AND @TaDateFin<dateFin))

Discussions similaires

  1. [MySQL] Afficher des évènements selon une année précise
    Par gotenks dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 11/01/2006, 14h43
  2. Boucle en Dos pour lister des fichiers selon une date
    Par Corben dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 17/12/2005, 13h17
  3. Trigger vidant des informations selon une contrainte de temp
    Par jlassira dans le forum Développement
    Réponses: 1
    Dernier message: 16/11/2005, 16h50
  4. Réponses: 44
    Dernier message: 19/10/2005, 11h54
  5. lister des fichiers selon des critères
    Par Corben dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 12
    Dernier message: 18/10/2005, 17h52

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