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!
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!
É lamentável que tenhamos tão escasso material com este seu online. Suas dicas são perólas. Muito obrigado
ResponderExcluirMuito Obrigado pelo acesso e, acho, pelo elogio!
ExcluirGrande Abraço
Boa tarde Marcelo,
ResponderExcluirTenho 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á!
Este comentário foi removido pelo autor.
ResponderExcluirUsando a consulta que você disponibilizou, fiz uma que lista a quantidade de inscritos por curso.
ResponderExcluirSegue:
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