Assistance technique

Trouver les cours ayant des inscriptions multiples

 
C'est moi :-)
Trouver les cours ayant des inscriptions multiples
Moodleurs particulièrement utilesTraducteurs

Bonjour,

Il peut arriver, suivant les organisations, que l'on se retrouve avec des inscriptions multiples (du même utilisateur) au même cours, via plusieurs méthodes d'inscription différentes. Par exemple, si on utilise l'inscription par fichier plat pour réaliser des inscriptions à des groupes, cela génère une inscription manuelle (dont on a pas forcément besoin si on utilise déjà une autre méthode d'inscription, telle que base de données ou lien méta-cours).

On pourrait dans ce cas vouloir chercher les cours concernés, pour voir l’ampleur du phénomène, puis envisager de supprimer certaines de ces inscriptions en doublon.

Voici une requête qui permet de cibler les cours concernés ayant des inscriptions manuelles en doublon avec d'autres inscriptions (et le nombre concerné) :

SELECT DISTINCT
c.id, c.shortname # Informations du cours , e1.enrol, e1.status, e1.name, e1.roleid # Informations inscriptions manuelles , e2.enrol, e2.status, e2.name, e2.roleid # Informations autres inscriptions , COUNT(DISTINCT(ue1.id)) AS Nb # Nombre de personnes concernées FROM mdl_course AS c JOIN mdl_enrol AS e1 ON e1.courseid = c.id JOIN mdl_enrol AS e2 ON e2.courseid = c.id JOIN mdl_user_enrolments AS ue1 ON ue1.enrolid = e1.id JOIN mdl_user_enrolments AS ue2 ON ue2.enrolid = e2.id JOIN mdl_user AS u ON u.id = ue1.userid AND u.id = ue2.userid WHERE ue1.id != ue2.id AND e1.enrol = 'manual' GROUP BY c.id ORDER BY Nb DESC ;

Il conviendra de s'assurer du (ou des) rôle(s) concerné(s), avant d'envisager un "nettoyage".

Séverin

 
Moyenne des évaluations Utile (2)
Avatar Nicolas Martignoni
Re: Trouver les cours ayant des inscriptions multiples
DéveloppeursMoodleurs particulièrement utilesTraducteurs

C'est vraiment super, Séverin, mais décidément, j'aime pas tes virgules en début de ligne clin d’œil

 
Moyenne des évaluations  -
C'est moi :-)
Re: Trouver les cours ayant des inscriptions multiples
Moodleurs particulièrement utilesTraducteurs

Effectivement, chacun ses petites manies d'écriture (qui parfois évoluent au fil du temps), avec les avantages et inconvénients que cela peut avoir.

Tu peux facilement les déplacer en fin de ligne précédente, le tout étant de faire attention à la première et dernière ligne lorsqu'on ajoute ou supprime des éléments clin d’œil

Tout comme le ; final sur une ligne séparée... qui permet de facilement supprimer le critère de tri, ou de ne pas le copier-coller si on utilise un environnement dans lequel il ne faut pas le ; final.

 
Moyenne des évaluations  -
Avatar Nicolas Martignoni
Re: Trouver les cours ayant des inscriptions multiples
DéveloppeursMoodleurs particulièrement utilesTraducteurs

>  (...) chacun ses petites manies d'écriture

C'est exactement cela, une question de goût.

 
Moyenne des évaluations  -
Avatar Patrick Lemaire
Re: Trouver les cours ayant des inscriptions multiples
Moodleurs particulièrement utiles

Et aussi, lors de la mise en commentaire d'une ligne, sauf la première, ça ne pose pas de problème !

Oui

 
Moyenne des évaluations  -
C'est moi :-)
Re: Trouver les cours ayant des inscriptions multiples
Moodleurs particulièrement utilesTraducteurs
Bonjour,

Si on souhaite pouvoir lancer cette requête via le bloc rapports configurables, il suffit d'adapter ainsi :

SELECT DISTINCT
  # Informations sur le cours et les méthodes d'inscriptions :
 CONCAT('<a target="_new" href="%%WWWROOT%%/course/view.php?id=',c.id,'">',c.id,'</a>') AS Cours , CONCAT('<a target="_new" href="%%WWWROOT%%/enrol/instances.php?id=',c.id,'">',c.shortname,'</a>') AS "Méthodes d'inscriptions" # Informations inscriptions manuelles :
 , e1.enrol AS Manual, e1.status AS Désactivé, e1.name AS Nom, e1.roleid AS Role # Informations autres inscriptions :
 , e2.enrol AS Inscription, e2.status AS Inactif, e2.name, e2.roleid # Nombre de personnes concernées :
 , COUNT(DISTINCT(ue1.id)) AS Nb FROM prefix_course AS c JOIN prefix_enrol AS e1 ON e1.courseid = c.id JOIN prefix_enrol AS e2 ON e2.courseid = c.id JOIN prefix_user_enrolments AS ue1 ON ue1.enrolid = e1.id JOIN prefix_user_enrolments AS ue2 ON ue2.enrolid = e2.id JOIN prefix_user AS u ON u.id = ue1.userid AND u.id = ue2.userid WHERE ue1.id != ue2.id AND e1.enrol = 'manual' # décommenter ci-dessous pour ne lister que les méthodes concernant le même rôle à coup sur
# (ne fonctionne pas pour l'inscription par BDD, car roleid vaut 0) # AND e1.roleid = e2.roleid GROUP BY c.id ORDER BY Nb DESC

Il est nécessaire de spécifier des titres de colonnes différents, sinon l'outil n'affiche pas toutes les colonnes !

Séverin
 
Moyenne des évaluations  -