Bonjour à tous,

je gère des calendriers d'opérateurs pour mon entreprise.

J'ai d'une part une table indiquant les jours et heures (planning_start_time & planning_end_time) et d'autre part une table indiquant les plages occupées (busy_start & busy_end).

Ce que j'ai réussi à faire pour le moment est pour chaque jour travaillé, indiquer si oui ou non une plage occupée existe. Si plusieurs plages occupées existent alors les lignes sont dupliquées.

Par exemple :
EDIT: Par exemple le résultat d'une vue

operator_id planning_start_time planning_end_time busy_start busy_end
2 15/11/2017 07:00 15/11/2017 17:00 NULL NULL
2 16/11/2017 07:00 16/11/2017 17:00 16/11/2017 08:00 16/11/2017 12:00
2 16/11/2017 07:00 16/11/2017 17:00 16/11/2017 14:00 16/11/2017 16:00


On voit que pour la journée du 16 on a deux plages occupées. Par contre pour le 15 rien du tout ce qui est normal, je n'ai pas de tâche programmée pour ce jour là.

Donc ça c'est un premier bon point.

Ce que je voudrais faire à présent c'est finir avec une table qui me donne les plages disponibles. Pour reprendre l'exemple ci-dessus ça donnerait:


operator_id available_start_time available_end_time
2 2017-11-15 07:00:00 2017-11-15 17:00:00
2 2017-11-16 07:00:00 2017-11-16 08:00:00
2 2017-11-16 12:00:00 2017-11-16 14:00:00
2 2017-11-16 16:00:00 2017-11-16 17:00:00


Pour la ligne en vert c'est évident, il n'y a pas de plage occupée, toute la journée travaillée est libre.

Pour les lignes en rouge c'est une autre affaire et c'est là où je cherche des idées sur la meilleure façon d'éclater ces lignes pour ne finir qu'avec les plages réellement libres (plages travaillées - plages occupées) avec une plage par ligne.

Un grand merci