Pular para o conteúdo principal

Relatório de número de alunos matriculados por curso no Moode em SQL

Olá Pessoal,

Hoje recebi um pedido de um leitor do Blog, para mostrar como seria um relatório contendo o número de alunos matriculados por curso no Moodle. Em outro momento aqui no Blog mostrei como fazer um Relatório de alunos matriculados por curso no Moodle em SQL.

Vamos lá então!

Para fazer esse relatório de número de alunos por curso, utilizei a  mesma consulta do Relatório de alunos matriculados, porém dessa vez utilizando a função COUNT do SQL.

SELECT COUNT(*) as NUM_ALUNOS 
FROM mdl_role_assignments 
JOIN mdl_user ON mdl_user.id = mdl_role_assignments.userid 
JOIN mdl_context ON mdl_role_assignments.contextid = mdl_context.id 
WHERE mdl_role_assignments.roleid = 5 AND mdl_context.contextlevel = 50 AND mdl_context.instanceid = ID_DO_CURSO

Essa consulta irá retornar o número de alunos em apenas um 1 curso. O curso que passamos o ID no campo MDL_CONTEXT.INSTANCEID.

Vamos a próxima consulta:

SELECT * FROM mdl_course

Nessa última consulta retorna todos os nossos cursos e você poderá fazer as cláusulas WHERE do jeito que bem entender nos campos da MDL_COURSE.

RESULTADO FINAL DA CONSULTA: Vamos unir as duas consultas e teremos o Relatório de alunos matriculados em todos os cursos do Moodle.

SELECT fullname as NOME, (SELECT COUNT(*) 
FROM mdl_role_assignments 
JOIN mdl_user ON mdl_user.id = mdl_role_assignments.userid 
JOIN mdl_context ON mdl_role_assignments.contextid = mdl_context.id 
WHERE mdl_role_assignments.roleid = 5 AND mdl_context.contextlevel = 50 AND mdl_context.instanceid = mdl_course.id) as NUM_ALUNOS FROM mdl_course

Note que, invés de passar o ID_DO_CURSO curso por curso, usamos o resultado já produzido na consulta feita em MDL_COURSE onde utilizei a referência de mdl_course.id.

É isso pessoal! Espero ter ajudado mais uma vez!


Se gostou, divulgue o POST, comente e contribua. Se não gostou, comente também e vamos juntos melhorar.

Abraço a todos!

Comentários

  1. É lamentável que tenhamos tão escasso material com este seu online. Suas dicas são perólas. Muito obrigado

    ResponderExcluir
    Respostas
    1. Muito Obrigado pelo acesso e, acho, pelo elogio!

      Grande Abraço

      Excluir
  2. Boa tarde Marcelo,
    Tenho essa query que filtra as matriculas num intervalo de dadas e filtra também uma informação presenta no formulário de cadastro (mtr_user_info_data.data like 'Tipo_X'). Gostaria de adicionar o curso que o suário se inscreveu... tenho neste moodle 11 cursos. Gostaria de filtrar as matriculas em cada curso com sua nota, caso o aluno já tenha feito a avaliação.

    Você teria alguma dica?

    SELECT
    mtr_user_enrolments.userid,
    mtr_user_enrolments.timestart,
    mtr_user_info_data.fieldid,
    mtr_user_info_data.data,
    mtr_user.lastname AS nomedousuario,
    mtr_user.firstname AS sobrenomedousuario,
    mtr_user.email AS EMAIL
    FROM mtr_user_enrolments
    INNER JOIN mtr_user_info_data on (mtr_user_enrolments.userid = mtr_user_info_data.userid)
    INNER JOIN mtr_user on (mtr_user_enrolments.userid = mtr_user.id)
    WHERE
    (date(from_unixtime(mtr_user_enrolments.timestart)) >= '2014-01-01') AND
    (date(from_unixtime(mtr_user_enrolments.timestart)) <= '2014-10-31') AND
    (mtr_user_info_data.fieldid = '26') AND (mtr_user_info_data.data like 'Tipo_X')


    Agradeço deste já!

    ResponderExcluir
  3. Este comentário foi removido pelo autor.

    ResponderExcluir
  4. Usando a consulta que você disponibilizou, fiz uma que lista a quantidade de inscritos por curso.

    Segue:

    SELECT mdl_context.instanceid AS ID, mdl_course.fullname AS CURSO, COUNT( * ) AS NUM_ALUNOS
    FROM mdl_role_assignments
    JOIN mdl_user ON mdl_user.id = mdl_role_assignments.userid
    JOIN mdl_context ON mdl_role_assignments.contextid = mdl_context.id
    JOIN mdl_course ON mdl_course.id = mdl_context.instanceid
    WHERE mdl_role_assignments.roleid =5
    AND mdl_context.contextlevel =50
    GROUP BY mdl_context.instanceid
    LIMIT 0 , 500

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

Resolvendo problema na instalação do Moodle 3.1 [mysql_full_unicode_support]

Fala Galera! Recentemente fui instalar a versão do 3.1 do Moodle e me deparei com a seguinte mensagem de erro da instalação: Ou seja, a mensagem está falando que o seu banco de dados foi criado em um formato de arquivos não suportado. Na maioria das vezes a collaction criada automaticamente é LATIN1 e ele está pedindo UTF-8. Para resolver esse problema basta rodar o seguinte SQL em seu banco de dados MySQL. ALTER SCHEMA `NOME_DO_SEU_BANCO`  DEFAULT CHARACTER SET utf8  DEFAULT COLLATE utf8_general_ci; Feito isso prossiga normalmente com sua instalação do Moodle 3.1 e desfrute das novidades que essa versão traz. Espero que tenha gostado e até mais.

Tela personalizada de login do Moodle

As vezes queremos ou precisamos sair do tradicional e necessitamos fazer uma tela de login personalizada no Moodle. Em uma dessas necessidades que surgiu esse POST em que vou explicar como fiz uma tela personalidade para utilizar no Moodle. Lembrando sempre que existem inúmeras formas de se fazer a mesma coisa na programação, essa foi a forma que eu encontrei. Vamos lá: Primeiramente vamos contextualizar. Por padrão a tela de login do Moodle é como na imagem abaixo, ou ainda pode estar no index da página em um bloco de acesso.  (Clique na imagem para ampliar) 1º Criando o arquivo login.php Criei o arquivo PHP com os campos de usuário e senha e dei a ele o nome de login.php . Coloquei esse arquivo na pasta raiz do Moodle.  A grande questão desse arquivo é no parâmetro action do formulário. Ele aponta para o caminho login/index.php " que é o caminho de login tradicional do Moodle. Veja na imagem abaixo: 2º Usando o método isloggedin(); do Moodle E...

Configurar Aker Client no Windows

Hoje vou postar aqui sobre o Aker Client 1.0.10. O Aker Client é um software que faz a autenticação do cliente no Firewall da Aker. Muitas vezes se torna muito chato fazer essa autenticação de usuário e senha do domínio sempre que entramos no navegador ou qualquer programa que necessite de conexão com a internet. O Aker Client faz exatamente isso, pega seu login e senha do domínio e autentica diretamente no Aker Firewall não precisando ficar digitando sempre. Vamos lá! Primeiro faço o download e instale o Aker Client 1.0.10 Link para Download:  http://www.4shared.com/zip/lCUWcQLP/akerclient-1010-pt-win32-insta.html Depois de instalado vamos configurar o Aker Client: 1º Logado como administrador da máquina vá em Novo Servidor 2º Configuração do Novo Servidor 3º Vá em “Permissões de Acesso” 4º Servidor Configurado. Por enquanto não irá conectar já que não está logado como usuário do domínio. 5º Logar com um usuário do domínio e já estará conectado e autenti...