Para extrair uma lista de usuários que não estão cadastrados em nenhum curso do Moodle ou em um determinado curso, é necessário fazer a junção por exclusão da tabela usuário na tabela matrícula.
mdl_user – Tabela de usuário
mdl_role_assignments – Tabela de matrícula a partir da versão 1.7
A junção por exclusão consiste em mapear todos os registros na tabela usuário que não tenham correspondência na tabela da matrícula. No comando SQL isso é implementado por meio da sub consulta, como segue a abaixo.
Lista de usuários que não estão cadastrados em nenhum curso
SELECT id,firstname, lastname FROM mdl_user WHERE id NOT IN (SELECT userid FROM mdl_role_assignments )
Contar a quantidade de usuários que não estão cadastrados em nenhum curso
SELECT COUNT(id) FROM mdl_user WHERE id NOT IN (SELECT userid FROM mdl_role_assignments )
Lista de usuários que não estão cadastrados em um determinado curso
SELECT id,firstname, lastname FROM mdl_user WHERE id NOT IN (SELECT userid FROM mdl_role_assignments rs INNER JOIN mdl_context c ON rs.contextid=c.id WHERE c.instanceid=?)
Passe o parâmetro id do curso em c.instanceid=?
Contar a quantidade de usuários que não estão cadastrados em um determinado curso
SELECT COUNT(id) FROM mdl_user WHERE id NOT IN (SELECT userid FROM mdl_role_assignments rs INNER JOIN mdl_context c ON rs.contextid=c.id WHERE c.instanceid=?)
Passe o parâmetro id do curso em c.instanceid=?
Todos os filtros utilizam sub-select, uma consulta dentro da outra. O primeiro SELECT extrai a lista de usuário da tabela do usuário. O segundo SELECT extrai a lista de usuários da tabela matrícula. O camando NOT IN exclui da primeira lista, os usuários que tem correspondência na segunda lista. Assim, sobra apenas os que não estão cadastrados no curso.
Veja também:
Matricular Usuário no Curso do Moodle com Comando SQL
Cancelar Matricula no Moodle com Comando SQL
Data de inscrição do aluno no curso do Moodle
Boa Lino, seu blog está de parabéns, ótima referência para o moodle.
ResponderExcluirLino, existe alguma possibilidade de excluir alunos de um determinado curso, por exemplo: Tenho 10 alunos cadastrados na disciplina A desses mesmos 10 alunos, 5 estão cadastrados na disciplina B, teria como eliminar alunos da disciplina A sem afetar os 5 alunos que estão cadastrados na disciplina B? Os 5 alunos que não estão cadastrados em nenhuma disciplina, teriam que ser eliminados e os outros 5 alunos que estão na disciplina B ficariam no moodle. Acho que seria interessante fazer uma postagem sobre isso. Detalhe isso teria que ser feito por lote ou pelo próprio sistema "alunos por lote do moodle" ou pelo SQL.
ResponderExcluirObrigado.
Daniel,
ExcluirDê uma olhada nesse post:
http://moodlesql.blogspot.com.br/2013/08/excluir-alunos-do-curso-do-moodle-com.html