A partir da versão 1.9 do Moodle as notas ficam na tabela mdl_grade_grades. As avaliações na tabela mdl_grade_items. Para extrair uma lista com todas as avaliações feitas por um determinado aluno é necessário fazer junção da tabela como segue o código abaixo.
Código SQL para extrair a lista de nota de um aluno em um determinado curso:
SELECT i.itemname,g.finalgrade FROM mdl_grade_items i INNER JOIN mdl_grade_grades g ON i.id=g.itemid WHERE i.courseid=? AND g.userid=?
Descrição dos campos:
A consulta retorna 2 campos: i.itemname,g.finalgrade
i itemname – Nome da avaliação
g.finalgrade – Nota do a luno
Personalize os parâmetros
i.courseid=? (substitua ? por id do curso )
g.userid=? (substitua ? por id do usuário )
Esse código só exibe as avaliações feitas. As avaliações do curso que o aluno ainda não fez não serão exibidas. Para exibir todas as avaliações, mesmo as que o aluno ainda não fizer, substitua do comando SQL INNER JOIN para LEFT JOIN.
Para versão inferior a 1.9 o comando SQL deve ser outro. Houve muita alteração na tabela de nota a partir da versão 1.9 do Moodle.
Seria possível você criar um novo post sobre como matricular um aluno num curso, utilizando SQL?
ResponderExcluirSegue a postagem solicitada: http://moodlesql.blogspot.com/2010/07/matricular-usuario-no-curso-do-moodle.html
ResponderExcluirPor favor, estou com um problema em uma pesquisa feita no moodle.
ResponderExcluirPor ex:
adicionei esse codigo abaixo:
select *, (select finalgrade from mdl_grade_items gi, mdl_grade_grades g where g.itemid = gi.id AND gi.courseid = c.id AND g.userid = a.id and itemtype='course') as notas from mdl_user a inner join mdl_course_display b inner join mdl_course c on a.id = b.userid and b.course = c.id where a.username like '%nome%' order by fullname
para lista os cursos e as notas dos treinamentos que determinado usuário fez, LISTAR TODOS.
Porém a pesquisa está adicionando alguns cursos que o aluno nao foi cadastrado, gostaria de saber como melhorar o filtro de minha pesquisa para que nao haja mais erros.
Obrigado
Janderson,
ResponderExcluirAdicione no SQL a tabela de matrícula mdl_role_assignments para filtrar apenas os cursos que o aluno está inscrito.
Query para listar nome, sobrenome, nome do item da nota e a nota final dos alunos, sendo o padrão o nome da avaliação e o id do curso.
ResponderExcluirSELECT u.username, u.firstname, u.lastname, i.itemname, g.finalgrade
FROM mdl_grade_items i
INNER JOIN mdl_grade_grades g ON i.id = g.itemid
INNER JOIN mdl_user u ON g.userid = u.id
WHERE i.courseid =?
AND i.itemname LIKE 'NOME DA AVALIAÇÃO'
LIMIT 0 , 10000
Edmar,
ExcluirValeu pela colaboração
Teria como eu fazer um relatório com todas as notas de um aluno em todos os cursos?
ResponderExcluirTamires,
ExcluirPara montar a lista de nota de um aluno em todos os cursos, basta usar o mesmo código que está no post, porém tirar curso do WHERE e colocar no SELECT. Com essa modificação, o comando ficará assim:
SELECT i.courseid,i.itemname,g.finalgrade FROM mdl_grade_items i INNER JOIN mdl_grade_grades g ON i.id=g.itemid WHERE g.userid=?
Como pegar se o usuário foi aprovado ou não no curso?
ResponderExcluirPrecisava da média do curso para saber se foi aprovado ou não
ResponderExcluirAnaconda,
ExcluirPara extrair a média da nota final de um determinado curso, execute o seguinte comando SQL:
SELECT AVG(g.finalgrade) FROM mdl_grade_grades g INNER JOIN mdl_grade_items i ON g.itemid=i.id WHERE i.itemtype='course' AND i.courseid=?
Passe o parâmetro id do curso em i.courseid=?
Se o critério de aprovação for nota final >=7, por exemplo, execute o comando abaixo para listar a relação dos alunos aprovados com base nesse critério:
SELECT u.id, u.firstname,u.lastname,u.email, g.finalgrade FROM mdl_grade_grades g INNER JOIN mdl_grade_items i ON g.itemid=i.id INNER JOIN mdl_user u ON u.id=g.userid WHERE i.itemtype='course' AND g.finalgrade>=7 AND i.courseid=?
Passe o parâmetro id do curso em i.courseid=?
Você pode automatizar esse processo usando a ferramenta externa ao Moodle. Dê uma olhada nesse link: http://gmoodle.blogspot.com.br/2014/04/sistema-badiu-gmoodle.html
Olá, como eu poderia extrair apenas a média final do curso?
ResponderExcluirNo comando desse post ele seleciona todas as atividades, inclusive a média. No itemname da pesquisa o valor é NULL e este é a média pelo que percebi...
Quero dizer a média final de um aluno no curso...
Excluirmysql> select id, userid, itemid, finalgrade from mdl_grade_grades;
Excluir+----+--------+--------+------------+
| id | userid | itemid | finalgrade |
+----+--------+--------+------------+
| 1 | 3 | 2 | 1.00000 |
| 2 | 3 | 3 | 10.00000 |
| 3 | 3 | 4 | 7.00000 |
| 4 | 3 | 1 | NULL |
+----+--------+--------+------------+
mysql> select userid, avg(finalgrade) from mdl_grade_grades where finalgrade is not null group by userid;
+--------+-----------------+
| userid | avg(finalgrade) |
+--------+-----------------+
| 3 | 6.000000000 |
+--------+-----------------+
Junta com a tabela de usuários e a de cursos e coloca elas nas colunas e agrupamento.
Somente não consegui relacionar com a tabela de turmas.
Uma pergunta: O meu curso tem mais de uma turma. Como relacionar isso com a nota, sabendo que um aluno pode ser avalidado em turmas distintas uma vez que pode haver reprovação ?
ResponderExcluir