|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Nouveau Membre du Club
![]() med benÉtudiant Inscription : octobre 2010 Messages : 74 ![]() |
Bonjour,
je cherche à afficher la liste des employés qui n'ont pas de planning entre deux dates supérieurs à la date du jour employe(id_emp,nom) planning(id_pla,dateD,dateF) détail_emp_pla(id_emp,id_pla) voilà mon essaie avec date début '2011-05-09' et date fin '2011-05-15' Code sql :
MERCI |
||
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 846 ![]() |
salut,
Vu que tu obtiens l'ensemble inverse de celui que tu veux, c'est à dire tous les employé qui ont un planning posé sur la période voulue, il suffit d'utiliser ta requête comme sous requête: Code sql :
Si tu dois passer au crible des milliers d'entrées dans la sous requête et qu tu vois que ça rame, ça peut venir du fait que parfois mysql recrée la table temporaire qui est générée pour les résultats de la sous requête. La solution est alors simple: tu crées la table temporaire toi même tu la rempli avec les résultats de la sous requête et ta requête principale devient: Code sql :
SELECT nom FROM employe WHERE id NOT IN (SELECT id FROM temp) Pense à mettre des () dans ta clause where quand tu as pas mal d'opérateurs qui s'enchainent, ça évite les déconvenues sur la priorité entre eux et ça améliore la lisibilité pour nous pauvres humains |
||
|
|
10
|
|
|
#3 | |||
|
Nouveau Membre du Club
![]() med benÉtudiant Inscription : octobre 2010 Messages : 74 ![]() |
Citation:
les employés ayant un planning entre ces deux dates ('2011-05-08' AND '2011-05-16')d1 ne doivent pas figurer libre entre ( '2011-05-09' AND '2011-05-15')d2 par ce que d1 est inclue dans d2 |
|||
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 846 ![]() |
En fait, je te conseille de gérer les problèmes d'intervalles de dates coté php par exemple, c'est pas les fonction qui manquent (même une simple comparaison texte puisque c'est le format de datetime ou date)
ça simplifiera d'autan ta requête et il n'y aura plus que 2 between côté requête. L'idée c'est de vérifier l'inclusion des 2 intervalles et de modifier les limite de celui autorisé en fonctions de celle de celui exclu et ensuite de garder la date de now() pour chacun des limites de l'intervalle si elles sont inférieures. Tu te retrouves avec 2 cas:
Sinon tu rajoutes les between nécessaires en les mettant dans une parenthèse ainsi que les précédents dans une autre et tu lies ces dernières par un and. |
|
|
00
|
|
|
#5 | ||
|
Nouveau Membre du Club
![]() med benÉtudiant Inscription : octobre 2010 Messages : 74 ![]() |
j'ai trouvé la solution merci à tout le monde pour votre aide
Code sql :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com