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 :

requête avec contrainte de date gerée jour par jour


Sujet :

Requêtes MySQL

  1. #1
    Membre habitué Avatar de zemzoum89
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 373
    Points : 131
    Points
    131
    Par défaut requête avec contrainte de date gerée jour par jour
    Bonsoir,

    Voila je m'explique:

    j'ai trois table:

    une table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hotel (IdHot, NomHot, PaysHotel, VilleHotel, CategorieHot, SalleConf, Photo1, Photo2, Photo3, Photo4, Photo5, Photo6, DescrbHot, SituationHot, HebergementHot, RestaurationHot, EquipementHot, AnimationHot, ActiviteLoisir, ActiviteLoisirPayant, CommentaireHot, heureHot, TarifEnfantHot )
    une table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Chambre (TypeChambre, #IdHot(hotel.id), PrixDemiPension PrixPensionComplete, prixAllInclusive, PrixDouble, PrixSingle, PrixTriple, PrixQuad).
    et une table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateDispo (Iddate, #TypeChambre,#Idhot(id de la table chambre), Datedispo, NbChambreDispo).
    la table hotel et reliée à chambre par une composition et la table chambre et reliée a datedisponibilite par une relation "a" le problème c'est que je voudrai sélectionner les hotels disponibles pour une durée donnée donc je dois mettre ma requete dans une boucle for(datedeb="une date"; datedeb<="une date de fin"; datedeb++) et j'ai la requete suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	 $rep=mysql_query('SELECT  datedispo.IdHot, hotel.NomHot, hotel.PaysHot, hotel.VilleHot, hotel.CategorieHot, hotel.Photo1, hotel.SituationHot, 
    	 chambre.PrixDP, datedispo.Date FROM hotel, datedispo, chambre  WHERE (hotel.IdHot=datedispo.IdHot) AND (hotel.IdHot=chambre.IdHot) AND
    	 datedispo.TypeChambre IN (SELECT TypeChambre FROM datedispo, chambre WHERE jointure)  AND a.NbChambreDispo>='".$nbchambre."' AND
    	 hotel.VilleHot=\''.$villedest.'\' AND \''.$datearr.'\'  = datedispo.Date
    	 GROUP BY hotel.idhotel

    mais le problème qui se pose est: mysql ne va pas tenir en compte le type des chambre il se peut qu'a une date donnée ya un type dispo et a une autre un autre type dispo et il va me dire oui c'est dispo alors que moi je veux qu'il m'affiche que les hotel dispo la ou il y a au moins un type dispo pour toute la durée donnée de la boucle for...

    Merci beaucoup beaucoup pour votre aide... J'espère que vous pourrez m'aider j'en ai vraiment besoin...

  2. #2
    Membre confirmé Avatar de nounetmasque
    Inscrit en
    Janvier 2003
    Messages
    494
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 494
    Points : 570
    Points
    570
    Par défaut
    Je ne pense pas qu'il faille faire une boucle for pour lancer autant de requête qu'il y a de jours entre date_debut et date_fin.
    Par contre je te conseille de construire dynamiquement ton ordre SQL pour définir la condition des dates de disponibilité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    SELECT chambre.idChambre
    FROM
    (SELECT  chambre.idChambre, chambre.IdHot, chambre.typeChambre, count(*) as nb_jour
    FROM hotel
    INNER JOIN chambre ON hotel.IdHot = chambre.IdHot
    INNER JOIN datedispo ON chambre.IdHot=datedispo.IdHot AND chambre.typeChambre = datedispo.TypeChambre
    WHERE hotel.VilleHot = villedest
    AND datedispo.NbChambreDispo >= nbchambre
    AND datedispo.Datedispo BETWEEN date_debut AND date_fin
    GROUP BY chambre.idChambre, chambre.IdHot, chambre.typeChambre
    )
    WHERE nb_jour = DATEDIFF(date_fin, date_debut)
    Pour que cet exemple fonctionne il faut rajouter un identifiant unique dans ta table chambre.

    Par contre je ne sais pas si tu as la main sur les structure de tes tables mais je trouve le système un peu compliqué... Personnellement j'aurais inversé la logique en créant une table des réservation et non des disponibilités.
    Enfin en espérant que cela t'aidera quand même.
    "Dieu reste muet, si seulement nous pouvions convaincre l'être humain d'en faire autant."

Discussions similaires

  1. [AC-2003] A partir d'un intervalle de date remplir des données jour par jour
    Par colline_ dans le forum Access
    Réponses: 8
    Dernier message: 18/04/2014, 11h42
  2. Réponses: 1
    Dernier message: 23/06/2006, 19h10
  3. Requête avec sélection sur MAX et Rupture par Service
    Par Kmiecik Sigismond dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/04/2006, 14h00
  4. Requête avec Expr1: Format([Date];"ee")
    Par grenet dans le forum Access
    Réponses: 6
    Dernier message: 06/03/2006, 16h02
  5. Création requête avec gestion de date
    Par MELINE dans le forum Access
    Réponses: 1
    Dernier message: 30/09/2005, 11h12

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