Requête SQL - Profs par catégorie

Requête SQL - Profs par catégorie

par Olivier Valentin,
Nombre de réponses : 3
Avatar Développeurs de plugins Avatar Moodleurs particulièrement utiles

Bonjour à tous,

allez hop, un peu de SQL !
Je tourne sous Moodle 3.1, et je tente une requête que j'ai trouvée sur la page des requêtes ad-hoc Moodle.

Cette requête doit retourner le nombre distinct d'enseignants pour une catégorie donnée, ainsi que dans ses sous-catégories. Dans mon Moodle, chaque catégorie correspond à une faculté. Mais le chiffre donné me semble disproportionné par rapport à la réalité du corps enseignant de la catégorie / faculté que je viens de tester.

Voici la requête telle que je l'ai appliquée :

SELECT COUNT(DISTINCT tra.userid) AS profs
FROM mdl_course AS c
LEFT JOIN mdl_context AS ctx ON c.id = ctx.instanceid
JOIN mdl_role_assignments AS tra ON tra.contextid = ctx.id
JOIN mdl_course_categories AS cats ON c.category = cats.id
WHERE c.category = cats.id
AND (
cats.path LIKE '%/2/%'
OR cats.path LIKE '%/2'
)

AND tra.roleid=3
Est-ce que le résultat est au final fiable ? Ou est-ce qu'il manquerait un élément à spécifier, comme le contextlevel (50 pour un cours) ?

Ou est-ce que j'aurais mal compris le résultat qui ressort ? Pour moi, je suis censé trouver le nombre de personnes différentes ayant le rôle editingteacher dans au moins un cours de la catégorie spécifiée.

Merci de votre aide ! Comme dit, si ça se trouve, tout est bien juste et il n'y a pas lieu à interrogation...

Olivier VALENTIN


Moyenne des évaluations  -
En réponse à Olivier Valentin

Re: Requête SQL - Profs par catégorie

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour Olivier,

A première vue, la requête semble correcte. Il serait effectivement prudent d'ajouter un contrôle sur contextlevel=50

Il faut aussi être méfiant, en fonction de votre organisation et du nombre de sous catégories, des cours de test qui peuvent exister (et faire "grossir" le nombre d'enseignant)...

Séverin

En réponse à Séverin Terrier

Re: Requête SQL - Profs par catégorie

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Au fait, suivant ce que tu cherches à obtenir exactement, tu peux regarder cette requête qui permet d'avoir des statistiques sur les cours d'une catégorie (et ses sous catégories).

Séverin

En réponse à Séverin Terrier

Re: Requête SQL - Profs par catégorie

par Olivier Valentin,
Avatar Développeurs de plugins Avatar Moodleurs particulièrement utiles

Bonjour Séverin,

merci pour ta réponse ! Je vais aussi tester ta requête qui me semble bien intéressante.

De mon coté, après avoir étudié la situation, le chiffre semble correct. Si on compte les vacataires, qui ont bien sûr le rôle editingteacher sur Moodle, et sachant qu'il y a aussi des comptes manuels (pour les externes qui ne sont pas dans le CAS), plus encore des vacataires non renouvelés mais toujours là... l'un dans l'autre, le chiffre se tient ! 

J'ai effectué en plus un contrôle sur le contexte 50 : il y a une dizaine de résultats en moins seulement.

SELECT COUNT(DISTINCT tra.userid) AS profs
FROM mdl_course AS c
LEFT JOIN mdl_context AS ctx ON c.id = ctx.instanceid
JOIN mdl_role_assignments AS tra ON tra.contextid = ctx.id
JOIN mdl_course_categories AS cats ON c.category = cats.id
WHERE c.category = cats.id
AND (
cats.path LIKE '%/2/%'
OR cats.path LIKE '%/2'
)

AND tra.roleid=3 AND ctx.contextlevel=50


En fait, au niveau macro de Moodle, cette requête n'a de sens que si l'on a un Moodle très propre où les cours sont renouvelés chaque année et sont nécessairement vivants, ce qui n'est pas notre cas. Du coup, je tombe sur des modules inactifs, ou dont les enseignants ne sont plus dans nos bâtiments. Mais je garde quand même sous le coude, ça peur servir !

Merci pour ton aide ! sourire