|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Invité de passage
![]() David Inscription : avril 2010 Messages : 8 ![]() |
Bonsoir tout le monde,
J'ai un problème avec une de mes requettes Doctrine. J'ai deux tables sql (géré via phpmyadmin) avec l'architecture suivante. Code :
Code :
Code :
Mon problème ici est que ma requette effectue bien le test sur date_debut et date_fin du premier champ trouvé sur la table reservation mais ne va pas plus loin. Il peut y avoir plusieurs reervation pour une même salle à différentes dates, mais le test ne s'effectue que sur le premier resultat trouvé. Comment faire en sorte que ma requette fasse un test sur TOUS les champs de ma table reservation respectant s.id_salle = r.id_salle ? Faut t'il faire intervenir une boucle ?. Je ne suis pas sur d'etre clair , n'hésitez pas si vous avez des questions, je vous remercie. David. |
||||||
|
|
00
|
|
|
#2 |
![]() ![]() |
Écris la requête en SQL pur, ce sera plus lisible et plus facile à débugguer.
Si tu as des conditions dans le WHERE qui concernent la table de droite de la jointure externe gauche, cela revient à faire une jointure interne. Voir explication sur mon blog.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#3 | ||
|
Invité de passage
![]() David Inscription : avril 2010 Messages : 8 ![]() |
Bonjour, je te remercie de ta réponse
En simplifiant le problème au salle disponible à une date donnée j'obtient ceci en requete sql pur. Code :
Hors si il y a plusieurs fois la même salle reservé par exemple: Le lundi de 8h à 10h la salle 1 est reservé. Le mardi de 8h à 10h la salle 1 est reservé. Si je demande les salles dispos le lundi de 8h à 10h il me renverra la salle 1 car elle apparaît une deuxième fois dans la table réservation à une date différente... Avez vous une idée de comment je pourrais modifier tout ca pour obtenir ce que je veux ? |
||
|
|
00
|
|
|
#4 | ||
![]() ![]() |
Une réservation est définie par une date de début de réservation DRR et de fin de réservation DFR.
Pour savoir si une salle est libre entre une date D1 et une date D2, il faut qu'il n'existe pas de réservation pour cette salle satisfaisant les conditions suivantes : - D1 entre DRR et DFR ou D2 entre DRR et DFR ou (D1 < DRR et D2 > DFR) Vu que tu utilises MySQL qui ne connait pas la fonction OVERLAPS, voici la traduction en SQL pour MySQL : Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
10
|
|
|
#5 |
|
Invité de passage
![]() David Inscription : avril 2010 Messages : 8 ![]() |
Merci de ta réponse cinephil,
Effectivement ça a l'air beaucoup plus simple comme ça J'avais pensé à sélectionner toutes les salles qui ont une réservation aux dates données, et ensuite faire un select de toutes les salles sauf celles sélectionnées précédemment !. Mais ta solution est beaucoup plus propre et simple, je teste ça dans la journée et je te tiens au courant. Merci encore, David.D Edition : J'ai tout retranscrit sur Doctrine, effectué plusieurs tests et tout fonctionne parfaitement, je te remercie beaucoup cinephil à bientôt |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com