Bonjour,
Avant toute chose, je tiens à préciser que ma requête actuelle fonctionne, mais je me demande si il n'est pas possible de l'optimiser un peu plus.
Je vous explique, je suis en train de mettre en place un site d'évaluation de compétences interne.
J'ai donc des utilisateurs basiques et des chefs d'équipes. Chaque utilisateur devra remplir un certain nombre d'évaluations de son coté, et leur chef d'équipe devra les évaluer de son coté.
Une fois ces 2 évaluations faites, l’utilisateur et son chef pourront donc se voir afin de comparer et de faire une évaluation finale.
J'ai donc une page ou les chefs d'équipe voient la liste de tout les utilisateurs qu'ils doivent évaluer. Ils doivent aussi voir si l'utilisateur à déjà rempli son évaluation ou si eux même l'ont déjà rempli pour cet utilisateur.
C'est donc pour cette requête que je me questionne.
Tout d'abord, voici les tables utilisées:
- utilisateur (id_utilisateur, nom, prenom, id_type_utilisateur, id_evaluateur)
- theme (id_theme, nom_theme)
- sous_theme (id_sous_theme, id_theme, nom_sous_theme, description) //inutile dans cette requete
- repere (id_repere, id_sous_theme, text_repere) //inutile dans cette requete
- evaluation (id_evaluation, id_theme, id_utilisateur, id_evaluateur, date_evaluation)
- evaluation_value (id_evaluation, id_utilisateur, id_repere, note, commentaire)
Et voici la requête que j'ai actuellement qui fonctionne mais qui ne me parait pas la plus optimisée:
Si evalAuto != NULL, alors l'utilisateur à déjà rempli son évaluation
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 SELECT u.id_utilisateur, u.nom, u.prenom, t.nom_theme, e.id_evaluation, ev_auto.id_evaluation AS evalAuto, ev_tiers.id_evaluation AS evalTiers FROM utilisateur u INNER JOIN theme t LEFT JOIN evaluation e ON e.id_utilisateur = u.id_utilisateur AND e.id_theme = t.id_theme LEFT JOIN evaluation_value ev_auto ON ev_auto.id_evaluation = e.id_evaluation AND ev_auto.id_utilisateur = e.id_utilisateur LEFT JOIN evaluation_value ev_tiers ON ev_tiers.id_evaluation = e.id_evaluation AND ev_tiers.id_utilisateur = e.id_evaluateur WHERE u.id_evaluateur = 1 /*id_evaluateur est variable*/ GROUP BY u.id_utilisateur, t.nom_theme ORDER BY u.nom ASC
Si evalTiers!= NULL, alors le chef à déjà rempli l'évaluation de l'utilisateur
N'y a t'il pas une meilleur façon de récupérer ces 2 informations ?
J'espère que mes explications sont suffisamment claires, sinon n'hésitez pas à me demander des précisions.
Merci d'avance pour votre aide !
Bonne journée
Partager