Requêtes MySQL sur les cours...

Requêtes MySQL sur les cours...

par Patrick Lemaire,
Nombre de réponses : 1
Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs
Bonjour,

J'ai été obligé de fermer, pour cette fin d'année, toute une liste de cours (139 au total) dans une sous-catégorie de mon Moodle. Pour ce faire, j'ai attaqué la base principale à coup de roquette... euh, de requêtes. Je me suis demandé s'il existait, quelque part, une centralisation de ces requêtes salvatrices ?!?
Qu'en pensez-vous ?




Voici déjà la mienne (livrée sans garanties) :

UPDATE moodle.mdl_course SET `visible`=0 WHERE moodle.mdl_course.category IN (SELECT `id` FROM moodle.mdl_course_categories WHERE moodle.mdl_course_categories.path LIKE "chemin%");

Petite explication de texte pour ceux qui voudraient bien comprendre la démarche :

Petit rappel, les cours sont rangés dans des sous-catégories, elles même rangées dans des catégories... Nous allons devoir taper dans 2 tables (mdl_course et mdl_course_categories) pour obtenir satisfaction. Dans ma requête, ma base s'appelle moodle !
La condition WHERE moodle.mdl_course_categories.path LIKE "chemin%" filtre les id des sous-catégorie de cours (et ses descendants) dont le chemin correspond à notre critère de sélection.
Ce chemin, justement, s'écrit de la façon suivante : "/x/y/z" où x est l'id de la catégorie principale, y l'id de la sous-catégorie et z, l'id de la sous-sous-catégorie... On va s'arrêter là mais ça pourrait continuer longtemps.
Ex: ="/12/34" avec 34 comme id de la sous-catégorie rangée dans la catégorie n°12.
Vous imaginez bien qu'on pourrait améliorer cette requête en en imbriquant d'autre plus éloquentes. Mais je n'ai pas trop le temps... sourire Vous serez donc forcer d'aller chercher dans votre Moodle quel est le chemin de votre sous-catégorie.
Le champs visible doit être basculer à 0 si on veut fermer le cours aux étudiants. Le reste de la requête me parait assez simple à traduire...

Petite remarque et gros dangers de cette requête :
Les plus attentifs auront remarqué une faiblesse dans cette requête. En effet, le critère de sélection peut engendrer des débordements puisque nous pourrions avoir le cas suivant : soit les chemins /12/34, /12/34/56 et /12/345. Si nous voulons sélectionner tous les cours de la sous-catégorie 34 et ses descendants (donc /12/34 ET /12/34/56), nous allons embarquer ceux de la catégorie 345 puisqu'elle commence par la même séquence de chiffre (à savoir un 3 suivi d'un 4). Faites donc attention !!!


Je laisse le soin aux spécialistes du MySQL d'améliorer cet embryon et j'espère qu'elle pourra servir à d'autres. Je ne suis pas persuadé d'avoir été très explicite mais c'est déjà un premier pas clin d’oeil

Je suis preneur d'autres requêtes du même genre que vous auriez développées pour votre usage !

A bientôt,

Moyenne des évaluations  -
En réponse à Patrick Lemaire

Re: Requêtes MySQL sur les cours...

par Patrick Lemaire,
Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs
Bonjour Patrick,

Je vois que tu as beaucoup de réponse alors j'en profite pour te répondre grand sourire
Je pense avoir trouvé une solution pour écarter le danger cité !
Voici ma deuxième proposition :
UPDATE moodle.mdl_course SET `visible`=0 WHERE moodle.mdl_course.category IN (SELECT `id` FROM moodle.mdl_course_categories WHERE moodle.mdl_course_categories.path LIKE "chemin/%" OR moodle.mdl_course_categories.path="chemin");

A bientôt,