A Plataforma Moodle tem um excelente sistema de questionário . É um dos recursos mais rico do Moodle. Caso for necessário montar um relatório customizado, aí começa a dor de cabeça. Sobra pergunta e falta resposta.
- Em qual tabela da base de dados fica armazenada os dados do questionário?
- Como consultar esses dados com o comando SQL?
A resposta para essas perguntas é muito simples. Vamos lá. Primeiro vamos mapear a as principais tabelas. Em seguida, vamos demonstrar o comando SQL para consultar os dados.
As consultas fazem SELECT apenas em alguns campos que se julga mais importantes para compreensão da tabela.
As consultas fazem SELECT apenas em alguns campos que se julga mais importantes para compreensão da tabela.
Principais Tabelas do Questionário
- mdl_question – Armazena as questões
- mdl_question_answers - Armazena opções de resposta das questões e gabaritos
- mdl_quiz – Armazena os questionários
- mdl_quiz_grades - Armazena nota final do questionário de cada aluno
- mdl_quiz_attempts – Armazena a nota final de cada tentativas de resposta
- mdl_question_states – Armazena as respostas dos alunos
As tabelas não são apenas essas. Há muito mais. Entendendo essas, as demais será moleza. Bem, agora que você sabe onde fica o armazém de dados, deve estar mais tranqüilo. Vamos ao próximo passo que é a consulta com o comando SQL. Todos os comando SQL foram testados na versão 1.9 e 1.9.7 do Moodle.
1- SQL para consultar questões
SELECT id,name,questiontext,qtype FROM mdl_question
Essa consulta retorna todas as questões cadastradas. Retorna uma lista com:
- id - Id da questão
- name - Nome da questão
- questiontext – Enunciado da questão
- qtype – Tipo da questão
2- SQL para consultar alternativas de respostas e gabarito de uma determinada questão
SELECT id,answer,fraction FROM mdl_question_answers WHERE question=?
Passe o parâmetro id da questão em question=?
Essa consulta retorna todas as opções de respostas de uma determinada questão. Retorna uma lista com:
- id - Id da resposta
- answer – Texto da resposta
- fraction – Fica o gabarito das respostas. Indica se a resposta é verdadeira ou falsa.
3 - SQL para consultar questionário um determinado curso
SELECT id,name,questions,grade FROM mdl_quiz WHERE course=?
Passe o parâmetro id do curso em course=?
Essa consulta retorna uma lista de questionário vinculado a um determinado curso.
Retorna uma lista com:
- id - Id do questionário
- name – Nome do questionário
- questions – Lista de Id das questões (que ficam na tabela mdl_question ) instanciadas no questionário. A lista de Id é separada por virgula . Algo assim: 1,2,4,8…
- grade - Escala de nota maxima do questionário. Indica se questionário vale nota 10 por exemplo.
Observação:
Se você estava procurando uma tabela com relação de muitos para muitos que relacione a tabela do questionário com a tabela da questões, dançou. Perdeu tempo vasculhando. O campo questions da tabela mdl_quiz resolve esse vínculo apenas listando os id das questões. Está claro que, neste caso, não há integridade de dados via chave primária e estrangeira. A integridade de dados fica na cama de aplicação do Moodle e não no motor da base de dados. Sendo assim, numa missão crítica, a eficiencia e performance do Moodle pode ser questionada. Se houver falha na camda de aplicação, a gravação no banco pode ficar incompleta, assim pode gerar dados orfãos na base de dados.
4 - SQL para consultar lista de nota dos alunos em um determinado questionário
SELECT u.id,u.firstname,u.lastname,g.grade FROM mdl_user u INNER JOIN mdl_quiz_grades g ON u.id=g.userid WHERE quiz=?
Passe o parâmetro id do questionário em quiz=?
Essa consulta lista a nota final dos alunos numa atividade implementada com o questionário. Faz junção da tabela mdl_user e mdl_quiz_grades. Há caso em que o questionário pode ser configurada para o aluno fazer mais de uma tentativa, valendo como nota final a da maior nota. Essa consulta traz sempre a final da nota configurada no questionário.
A lista retorna:
Se você estava procurando uma tabela com relação de muitos para muitos que relacione a tabela do questionário com a tabela da questões, dançou. Perdeu tempo vasculhando. O campo questions da tabela mdl_quiz resolve esse vínculo apenas listando os id das questões. Está claro que, neste caso, não há integridade de dados via chave primária e estrangeira. A integridade de dados fica na cama de aplicação do Moodle e não no motor da base de dados. Sendo assim, numa missão crítica, a eficiencia e performance do Moodle pode ser questionada. Se houver falha na camda de aplicação, a gravação no banco pode ficar incompleta, assim pode gerar dados orfãos na base de dados.
4 - SQL para consultar lista de nota dos alunos em um determinado questionário
SELECT u.id,u.firstname,u.lastname,g.grade FROM mdl_user u INNER JOIN mdl_quiz_grades g ON u.id=g.userid WHERE quiz=?
Passe o parâmetro id do questionário em quiz=?
Essa consulta lista a nota final dos alunos numa atividade implementada com o questionário. Faz junção da tabela mdl_user e mdl_quiz_grades. Há caso em que o questionário pode ser configurada para o aluno fazer mais de uma tentativa, valendo como nota final a da maior nota. Essa consulta traz sempre a final da nota configurada no questionário.
A lista retorna:
- id - Id usuário
- u.firstname – Nome do usuário
- u.lastname – Sobrenome do usuário
- g.grade – Nota final
5 - SQL para consultar as tentativas de resposta do questionário feitas por um determinado aluno
SELECT id,attempt, sumgrades FROM mdl_quiz_attempts WHERE quiz=? AND userid=?
Passe o parâmetro id do questionário em quiz=? e id do usuário em userid=?
Essa consulta lista todas as tentativas feita em um questionário por um aluno. Caso o questionário for configurado para ter mais de uma tentativa de resposta, o aluno pode responder várias vezes. Todas as tentativas ficam armazenadas na tabela mdl_quiz_attempts.
A lista retorna:
- id - Id da tentativa
- attempt – Numéro seqüencial das tentativas feitas
- sumgrades – Nota final da tentativa
6 - SQL para consultar resposta do questionário de um determinado aluno
SELECT q.name,s.seq_number,s.answer,s.grade FROM mdl_quiz_attempts t INNER JOIN mdl_question_states s ON t.id=s.attempt INNER JOIN mdl_question q ON s.question=q.id WHERE t.quiz=? AND t.userid=? AND t.attempt=?
Passe o parâmetro id do questionário em quiz=?, id do usuário em userid=? e id da tentativa em t.attempt=?
Essa consulta extrai uma lista de todas as questões do questionário com as respostas do aluno. Caso uma questão sofrer alteração durante o momento do preenchimento do questionário, será listado mais de uma vez, ou seja, a lista traz o histórico das alterações.
A lista retorna:
- q.name – Nome da questão
- s.seq_number – Controle do histórico da alteração
- s.answer – Resposta atribuída
- s.grade – Nota obtida
O campo s.seq_number indica quantas vezes a questão sofreu alteração. A última alteração que é válida para computar a nota final da tentativa.
7 - SQL para consultar histórico de resposta de uma determinada questão de um aluno
SELECT s.seq_number,s.answer,s.grade FROM mdl_quiz_attempts t INNER JOIN mdl_question_states s ON t.id=s.attempt WHERE t.quiz=? AND t.userid=? AND t.attempt=? AND s.question=?
Passe o parâmetro id do questionário em quiz=?, id do usuário em userid=?, id da tentativa em t.attempt=? e id da questão em s.question=?
Essa consulta retorna o histórico de resposta de uma questão dado por um aluno. É uma consulta detalhada exclusivamente de uma questão. Cada alteração na questão é registrada no banco de dados.
A lista retorna:
- s.seq_number – Controle do histórico da alteração
- s.answer – Resposta atribuída
- s.grade – Nota obtida
Bem, com essas informações já é possível decifrar o restante das tabelas sobre o questionário que não foram abordados aqui. Entendendo a lógica de funcionamento e ligação entre as tabelas aqui apresentado, já possibilita montar um relatório customizado sobre o Moodle.
Agora que já desvendou o mistério, faça um intervalo, vá tomar uma cerveja. Ao voltar da manguaça, boa programação.