Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marisa Lima

Criar Query

Recommended Posts

Boas.

 

Estou com um bloqueio mental desde ontem, não conseguindo criar uma query que penso ser simples. O problema é o seguinte:

 

Tenho as accao, sessao e presencas que registam a realização de uma dada acção de formação, com N sessões, onde cada sessão tem um registo de presenças.

O meu problema está em criar uma query que me devolva os formandos que faltaram a uma dada sessão, uma vez que o que fica guardado são as presenças e não as faltas.

No fundo o meu problema será resumido à questão de um aluno que vai a uma aula e a sua presença é registada, se este não for fica com falta que não aparece no sistema, mas é facilmente identificada, mas não sei porquê só consigo criar queries para as presenças...

SELECT presenca.formando,sessao.id,count(*) as TotalPresenca  from 
presenca INNER JOIN sessao ON presenca.sessao=sessao.id INNER JOIN accao ON sessao.accao=accao.id
GROUP BY presenca.formando,sessao.id

Será que me conseguem ajudar sem disponibilizar a base de dados?

Obrigada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como estão gravando os dados? Se o formando falta uma sessão, grava algum valor no banco? Por exemplo, se você tiver uma coluna "presenca", você pode gravar 1 para presente e 0 para quem não foi a sessão. A listagem seria mais simples neste sentido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Complementando o que disse o Allex Carvalho, se você tiver uma relação dos formandos, você consegue conferir quantas sessões cada formando participou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim eu tenho uma relação com os formandos, na tabela presenca ficam guardados o id da sessão e o id do formando. Desta forma eu consigo saber em que acções o formando participou, mas como é que eu obtenho a lista dos formandos que faltaram a uma determinada acção?

O que o Allex Carvalho disse era o ideial, mas neste cenário em necessito de inserir por defeito a presença de cada vez que uma sessão é inserida no sistema e só depois, caso alguém falta é que esse registo é eliminado. Isto porque na realidade para a qual este projecto é desenvolvido a situação de faltas é "ocasional". Para reduzir a introdução manual de presenças optou-se por este caminho.

 

Será que consigui explicar o que pretendo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um exemplo bem chulo.

SELECT
  f.id,
  f.nome,
  v.total_sessoes - COUNT(s.id) AS faltas # pega o total de sessoes e subtrai o total de presenças
FROM formandos AS f
LEFT JOIN sessoes AS s
  ON s.id_formando = f.id
CROSS JOIN (
  SELECT COUNT(id) total_sessoes
  FROM sessoes
) AS v
WHERE
...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.