Ordenação para ficar na sequência do quadro de nota - Consulta no Banco

Ordenação para ficar na sequência do quadro de nota - Consulta no Banco

por Clóvis Amorim -
Número de respostas: 3

Oi, pessoal.

Montei um select que estou usando na construção de um relatório de notas, que basicamente traz as seguintes informações: Categoria, Atividade e Nota Atribuída, isto referente a um usuário dentro de um curso.


Funcionou como eu esperava mas queria saber qual é a ordenação que é utilizada para ficar na mesma ordem do quadro de nota? Pensei que seria o id da categoria, seguido pelo sortorder do item de nota, mas os totalizadores de categoria ficaram desordenados.


Segue a consulta, onde a tentativa foi de utilizar order by categoria.id,item.sortorder, mas as categorias que totalizam não respeitaram a lógica apresentada visualmente no quadro de notas:


select categoria.fullname as Categoria,item.itemname as Atividade,nota.finalgrade as Nota
from mdl_grade_items item
LEFT OUTER JOIN mdl_grade_grades nota ON (item.id=nota.itemid and nota.userid=?)
LEFT OUTER JOIN mdl_grade_categories categoria  on (item.categoryid = categoria.id)
where item.courseid=?
order by categoria.id,item.sortorder

Contagem das avaliações:  -
Em resposta à Clóvis Amorim

Re: Ordenação para ficar na sequência do quadro de nota - Consulta no Banco

por Daniel Neis Araujo -
Imagem de Core developers Imagem de Plugin developers Imagem de Translators

Oi, Clóvis


então, respondendo sua dúvida:


Primeiramente, não deves fazer o LEFT OUTER JOIN, mas apenas um JOIN comum.

Além disso, eu sugeriria utilizares API de notas em PHP do Moodle, se possível, ou mesmo a API REST, ao invés de fazer consultas diretas na base.

Para ordenar as categorias na mesma ordem do quadro de notas, você precisaria juntar a tabela grade_categories com grade_items (acho que através do iteminstance + itemtype) para pegar o sortorder de cada categoria e usar esse valor no order by.


Grande abraço,

Daniel

Contagem das avaliações:  -
Em resposta à Daniel Neis Araujo

Re: Ordenação para ficar na sequência do quadro de nota - Consulta no Banco

por Clóvis Amorim -

Olá, Daniel.

O uso do LEFT OUTER JOIN foi proposital e é necessário pois quero todos os itens (mdl_grade_items), mesmo os que não tem nota, com o JOIN só aparecem os com nota (quero que apareça como no relatório de notas do usuário, tendo o aluno participado de tudo ou não -  tudo que ele deveria ter respondido). O segundo LEFT também é necessário para que os totalizadores (os mesmos que aparecem no relatório de notas do usuário) sejam visualizados.


Depois, quando  tiver um tempinho, roda este SQL e tenta visualizar o mesmo relatório pela interface do moodle (aqui coloquei usuário 14 no curso 3, basta substituir estes dois parâmetros):

select categoria.fullname as Categoria,item.itemname as Atividade,nota.finalgrade as Nota
from mdl_grade_items item
LEFT OUTER JOIN mdl_grade_grades nota ON (item.id=nota.itemid and nota.userid=14)
LEFT OUTER JOIN mdl_grade_categories categoria  on (item.categoryid = categoria.id)
where item.courseid=3
order by categoria.id,item.sortorder


Vem tudo que tem no relatório de notas, todos os itens (atividades), as com nota e as sem nota (as que o aluno não respondeu também ), os totalizadores. Enfim, tudo é mostrado, problema é a ordem que não fica igual ao relatório de nota. Estou usando o sortorder, mas é que o sortorder é no item e não na categoria.


Valeu pela força!!!

Contagem das avaliações:  -
Em resposta à Clóvis Amorim

Re: Ordenação para ficar na sequência do quadro de nota - Consulta no Banco

por Daniel Neis Araujo -
Imagem de Core developers Imagem de Plugin developers Imagem de Translators
Oi, Clovis

entendo agora sua necessidade do left join.

O que acontece é que as categorias de nota também são itens de nota. Então você tem que fazer mais um join com a tabela de items, a partir da categoria e ordenar pelo sortorder do item que é do tipo categoria e tem o instanceid daquela categoria.


Contagem das avaliações:  -