Ao receber essa demanda, você fuça um pouco o Moodle e percebe que não existe essa opção de relatório. Mesmo assim a equipe pedagógica fica no seu cangote esperando uma solução.
Neste caso, você não tem outra alternativa que não seja extrair esses dados diretamente da base de dados do Moodle com comando SQL. Para aliviar a sua barra, facilitando algumas dias ou semanas de pesquisa vai aí o macete.
Para consultar os tópicos mais acessados é necessário fazer a junção das seguintes tabelas:
- mdl_forum – Tabela de fórum
- mdl_forum_discussions – Tabela de tópicos
- mdl_modules – Tabela de atividades do curso
- mdl_log – Tabela de log
SELECT d.id,d.name,COUNT(l.info) FROM mdl_forum_discussions d INNER JOIN mdl_forum f on f.id=d.forum INNER JOIN mdl_course_modules cm ON f.id=cm.instance INNER JOIN mdl_modules m ON cm.module=m.id INNER JOIN mdl_log l ON l.cmid=cm.id WHERE f.id=? AND m.name='forum' AND l.module='forum' AND l.action LIKE '%discussion%' AND l.info=d.id GROUP BY d.id,d.name ORDER BY COUNT(l.cmid) DESC
SQL para PostgreSQL
SELECT d.id,d.name,COUNT(l.info) FROM mdl_forum_discussions d INNER JOIN mdl_forum f on f.id=d.forum INNER JOIN mdl_course_modules cm ON f.id=cm.instance INNER JOIN mdl_modules m ON cm.module=m.id INNER JOIN mdl_log l ON l.cmid=cm.id WHERE f.id=? AND m.name='forum' AND l.module='forum' AND l.action LIKE '%discussion%' AND l.info=CAST(d.id as varchar) GROUP BY d.id,d.name ORDER BY COUNT(l.cmid) DESC
O que diferencie os dois comandos SQL é que na consulta para PostgreSQL há conversão d.id para texto com comando CAST: l.info=CAST(d.id as varchar). Isso porque o PostgreSQL não compara campo numérico com texto. Já MySQL é mais tolerante. Tirando isso, o restante do comando é igual.
Essa consulta extrai uma lista com os seguintes campos:
- d.id – Id do tópico
- d.name – Nome do tópico
- COUNT(l.info) – Quantidade de acesso (click) no tópico
Você precisa especificar o id do fórum passando parâmetro em f.id=? logo após o comando WHERE.
Caso não souber o id do fórum, localize na base de dados pelo nome do fórum com o seguinte comando SQL:
SELECT id FROM mdl_forum WHERE name='Nome do Fórum'
Bem, agora que você tem o comando SQL, só falta implementar isso numa linguagem de programação ou então executar a consulta no banco e copiar o dados para excel para montar um gráfico bonito. Assim você dá solução à demanda de forma rápida e ninguém fica no seu cangote.
Outra informação interessante é a query para listar alunos que participaram de um Fórum de Discussão.
ResponderExcluirEsta query lista o login, nome e sobrenome dos alunos que participaram de determinado fórum. Para se obter o id da discussão que se encontra no campo: d.discussion = ? eu usei a query descrita neste post.
SELECT u.username, u.firstname, u.lastname
FROM mdl_forum_posts d
INNER JOIN mdl_user u ON d.userid = u.id
WHERE d.discussion = ?
GROUP BY d.id, u.id
Espero ter contribuido já que uso muito este blog em minhas consultas no moodle.
Edmar,
ExcluirValeu pela colaboração.
Se acrescentar o comando DISTINCT depois do SELECT vai listar os alunos sem repetir o nome.