Dans le cours sur la gestion de temps de SQLPro, j'ai repris son algorythme pour pallier l'absence du prédicat Overlaps dans MySQL. En reprenant l'algorithme, j'ai vu qu'il ne fonctionnait pas. À force de chercher, j'ai trouvé une coquille dans son cours
Il est écrit :
Il faut lire((période1.borne_debut > période2.borne_debut
et (période1.borne_debut < période2.borne_debut ou période1.borne_fin < période2.borne_fin)) ou
(période2.borne_debut > période1.borne_debut
et (période2.borne_debut < période1.borne_fin ou période2.borne_fin < période1.borne_fin)) ou
(période1.borne_debut = période2.borne_debut et (période1.borne_fin NON NUL et période2.borne_fin NON NUL)
Dans la suite du cours, il écrit très justement :((période1.borne_debut > période2.borne_debut
et (période1.borne_debut < période2.borne_fin ou période1.borne_fin < période2.borne_fin)) ou
(période2.borne_debut > période1.borne_debut
et (période2.borne_debut < période1.borne_fin ou période2.borne_fin < période1.borne_fin)) ou
(période1.borne_debut = période2.borne_debut et (période1.borne_fin NON NUL et période2.borne_fin NON NUL))
C'est en comparant les deux expressions que j'ai découvert la coquille.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT * FROM PERIODE WHERE (P1_DEBUT > P2_DEBUT AND (P1_DEBUT < P2_FIN OR P1_FIN < P2_FIN)) OR (P2_DEBUT > P1_DEBUT AND (P2_DEBUT < P1_FIN OR P2_FIN < P1_FIN)) OR (P1_DEBUT = P2_DEBUT AND (P1_FIN IS NOT NULL AND P2_FIN IS NOT NULL))
Voici l'emplacement du paragraphe :
http://sqlpro.developpez.com/cours/gestiontemps/#L1.2.2
Partager