Bonjour à tous
Je possède une base de données de courriers (traitées/non traitées) pour chaque direction (représentée par une personne), cette direction comporte plusieurs sous-directions (destinations)
Exp:
la direction A (représentée par le directeur X) comprend plusieurs sous-directions a1, a2, a3.
Alors tous les courriers arrivent à A, a1, à2, à3 ==>seront visibles par la personne X.
Voici le schéma de l'application :
1-J'ai commencé par afficher la liste des courriers de chaque personne (Direction)
#users (id,name,...)
#destinations (id,name_fr,...)
#user_has_destinations(user_id,destination_id)
#courriers(id,titre,description,remarque,...)
#courriers_has_destinations(courrier_id, destination_id)
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 select users.id,users.name, group_concat( DISTINCT destinations.name_fr) as directions FROM user_has_destinations LEFT JOIN users ON user_has_destinations.user_id=users.id LEFT JOIN destinations ON user_has_destinations.destination_id= destinations.id GROUP BY users.id
2 -Le nombre total et le nombre de courriers (traitées/non traitées) pour chaque direction.
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 SELECT users.id,users.name, group_concat( DISTINCT destinations.name_fr) as direction,direction_name, COUNT(courriers.remarque) as total, COUNT( CASE WHEN courriers.remarque = 1 THEN 1 END ) AS traités, COUNT( CASE WHEN courriers.remarque = 0 THEN 1 END ) AS non_traités FROM user_has_destinations LEFT JOIN users ON user_has_destinations.user_id=users.id LEFT JOIN destinations ON user_has_destinations.destination_id=destinations.id LEFT JOIN courrier_destination ON user_has_destinations.destination_id=courrier_destination.destination_id LEFT JOIN courriers ON courrier_destination.courrier_id=courriers.id WHERE users.id IS NOT Null GROUP BY users.id
La deuxième requête est-elle optimale ??
L'application finale est une application laravel avec un panneau d'administration pour chaque Direction...
Merci.
Partager