sexta-feira, 3 de setembro de 2010

Extrair Lista de Usuários não Cadastrados no Curso do Moodle com Comando SQL


    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_assignmentsTabela 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

3 comentários:

  1. Boa Lino, seu blog está de parabéns, ótima referência para o moodle.

    ResponderExcluir
  2. Lino, 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.
    Obrigado.

    ResponderExcluir