Bonjour,
J'ai une table mysql ressemblant à ceci (je n'ai laissé qu'une partie des champs, ceux susceptible d'être utilisés par la requête):
begin (datetime), end(datetime), PI_begin (varchar), PI_end (varchar), duration (time)
un petit exemple de ce qu'il pourrait y avoir en données
1 2 3 4 5 6 7 8 9 10 11
|
begin | end | PI_begin | PI_end | duration
2010-10-21 08:00:00 | 2010-10-21 08:30:00 | PI_00 | PI_01 | 01:30:00
2010-10-21 10:00:00 | 2010-10-21 10:10:00 | PI_01 | | 00:30:00
2010-10-21 10:40:00 | 2010-10-21 10:50:00 | | | 00:15:00
2010-10-21 11:05:00 | 2010-10-21 11:30:00 | | PI_02 | 00:45:00
2010-10-21 12:15:00 | 2010-10-21 12:30:00 | PI_02 | PI_03 | 01:00:00
2010-10-21 13:30:00 | 2010-10-21 14:00:00 | PI_03 | | 01:00:00
2010-10-21 15:00:00 | 2010-10-21 15:10:00 | | PI_04 | 00:30:00
2010-10-21 15:40:00 | 2010-10-21 15:50:00 | PI_04 | PI_05 | 01:30:00
.... |
Globalement
begin = date de début,
end = date de fin,
PI_Begin peux etre NULL (excepté le premier de la journée) mais doit être égal au PI_END de la ligne précédente,
PI_end peux etre NULL, à l'inverse il doit etre égal au PI_begin de la ligne suivante,
duration est la durée entre le 'end' de la ligne précédente et le 'begin' de la ligne suivante.
(Désolé, j'ai essayé de formater au mieux mon exemple).
Mon but est de récupérer les lignes 4 ,5 ,6 ,8 ,9 dans l'exemple ci dessus.
j'ai pour l'instant une requête de type
SELECT * FROM `matable` WHERE (DATE(begin) BETWEEN :date1 ANS :date2) AND (`PI_begin` == NULL OR `PI_end` == NULL)
Jusque la pas de soucis, sauf que j'ai une autre condition qui elle me pose soucis. La durée ne doit pas etre plus longue qu'une certaine valeur (toujours a définir, admettons pour l'exemple 00:30:00).
Malheureusement un simple
SELECT * FROM `matable` WHERE (DATE(begin) BETWEEN :date1 ANS :date2) AND (`PI_begin` == NULL OR `PI_end` == NULL) AND `duration` > '00:30:00'
ne suffit pas, puisque la durée n'est pas celle de la ligne seule.
C'est les durées des lignes 4 + 5 + 6 et celle de 8 + 9.
Et je dois dire que la je sèche un peu.
J’étais partie sur des requêtes imbriquées mais ne suis pas réellement sûr d'être sur la bonne voie, je dois avouer que je n'ai pas pratiquer de SQL depuis quelques temps .
J'ai toujours la possibilité de faire ce traitement en php, mais il est je pense préférable de le faire en MySQL puisque la réponse sera plus performante (De plus, c'est frustrant quand on arrive pas a faire la requête souhaitais)
Je me permet donc de solliciter votre aide, en espérant avoir été relativement clair.
PS: Encore désolé de la mise en forme un peu 'hardcore' et des fautes par dizaines que j'ai surement encore laissé passer...
Partager