Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, consegui montar essa query:
"SELECT d.nome, n.nota, n.id_etapa, a.data, c.nome, u.nome
FROM
tbl_notas n, tbl_turmas t,tbl_vinculos v,tbl_usuarios u,
tbl_disciplinas d, tbl_agendas a, tbl_cursos c
WHERE
n.id_disciplina = d.id_disciplina
AND n.id_agenda = a.id_agenda
AND t.id_curso = n.id_etapa
AND t.id_turma = v.id_turma
AND v.id_user = u.id_user
AND v.id_disciplina = n.id_disciplina
AND n.id_etapa = c.id_curso
AND n.id_aluno = '$uid'
AND a.nota = 'SIM'
ORDER BY
n.id_etapa DESC, d.nome, n.nota"
dessa forma eu consigo "trazer" tudo o que eu quero corretamente, porém, pra ficar 100% agora, eu preciso INCLUIR nessa QUERY
( acho que um left join ) de forma que eu traga os registros se TIVEREM ou NÃO professor.
Eu tenho uma tabela VINCULOS onde guardo essa informação, então CADA TURMA tem suas DISCIPLINAS ( GRADE ) e essas disciplinas seus professores ( APENAS UM PROFESSOR ).
tbl_vinculos
id_vinculo / id_turma / id_disciplina / id_user
tbl_usuarios
id_user / nome
tbl_turmas
id_turma / id_curso
tbl_notas
id_nota / id_aluno / id_disciplina / id_agenda / id_etapa / id_user
tbl_agendas
id_agenda / data
tbl_cursos
id_curso
tbl_disciplinas
id_disciplina / nome
OBRIGADO.
O vínculo nao é NO CURSO e sim na Turma. Entao, pode ou nao existir o vínculo. por isso eu pensei no left join
Então troco a tabela curso pela tabela turma:
SELECT t.id_curso, p.nome
FROM tbl_turmas t
LEFT JOIN tbl_professor p ON p.id_professor = t.id_professor
Entendeu a lógica?
Ainda nao entendi
Olha só:
SELECT d.nome, n.nota, n.id_etapa, a.data, c.nome
FROM
tbl_notas n, tbl_turmas t, tbl_disciplinas d, tbl_agendas a, tbl_cursos c
WHERE n.id_disciplina = d.id_disciplina
AND n.id_agenda = a.id_agenda
AND t.id_curso = n.id_etapa
AND n.id_etapa = c.id_curso
AND n.id_aluno = '10'
AND a.nota = 'SIM'
ORDER BY n.id_etapa DESC, d.nome, n.nota
esse select acima me retorna as disciplinas e notas respecitvas do aluno ID 10.
Até aqui ok.
O que eu tenho que incluir agora é o NOME DO PROFESSOR.
Essa informação está contida em uma tabela VINCULOS :
tbl_vinculos
id_turma / id_disciplina / id_user
Ou seja,
1 / 1 / 1
turma 001 / Portugues / Professor 1
1 / 2 / 2
turma 001 / Matematica / Professor 2
Agora, pode acontecer o seguinte:
1 / 3 / 0
turma 001 / Biologia / null
Essas 3 linhas abaixo, eu devo inserir na query, mais com LEFT JOIN
AND t.id_turma = v.id_turma
AND v.id_user = u.id_user
AND v.id_disciplina = n.id_disciplina
SELECT d.nome, n.nota, n.id_etapa, a.data, c.nome, t.id_turma, u.nome
FROM
tbl_notas n, tbl_turmas t, tbl_disciplinas d, tbl_agendas a, tbl_cursos c,
tbl_usuarios u, tbl_vinculos v
WHERE
n.id_disciplina = d.id_disciplina
AND n.id_agenda = a.id_agenda
AND t.id_curso = n.id_etapa
AND n.id_etapa = c.id_curso
AND t.id_turma = v.id_turma
AND v.id_user = u.id_user
AND v.id_disciplina = n.id_disciplina
AND n.id_aluno = '10'
AND a.nota = 'SIM'
ORDER BY
n.id_etapa DESC, d.nome, n.nota
Dessa forma ai, se a disciplina nao tiver um id_user VÁLIDO na tbl_vinculos, mesmo com NOTA ela não é selecionada.
Aí teria que referenciar novamente a tabela de usuários, uma para o aluno, e outra para o professor, pelo que entendi ambos estão na tabela de usuários, certo?
Sim, mas nao esquenta com o aluno. O que eu quero mesmo é poder incluir aquelas 3 linhas de forma que , se tiver ou nao na tbl_vinculos o registro seja selecionado.
Adicionando as tabelas tbl_usuario e tbl_vinculos não deu certo?
Olhas isso
QUERY
SELECT d.nome, n.nota, n.id_etapa, a.data, c.nome
FROM
tbl_notas n, tbl_turmas t, tbl_disciplinas d, tbl_agendas a, tbl_cursos c
WHERE n.id_disciplina = d.id_disciplina
AND n.id_agenda = a.id_agenda
AND t.id_curso = n.id_etapa
AND n.id_etapa = c.id_curso
AND n.id_aluno = '10'
AND a.nota = 'SIM'
ORDER BY n.id_etapa DESC, d.nome, n.nota
RESULTADO:
nome nota id_etapa data nome
ARTE 8 10 2015-02-26 2 ANO
BIOLOGIA 1 10 2015-02-26 2 ANO
BIOLOGIA 10 10 2015-04-10 2 ANO
EDUCAÇÃO FÍSICA 4 10 2015-03-27 2 ANO
EDUCAÇÃO FÍSICA 10 10 2015-04-10 2 ANO
FÍSICA 8 10 2015-08-10 2 ANO
HISTÓRIA 5 10 2015-09-11 2 ANO
QUÍMICA 1 10 2015-08-10 2 ANO
QUÍMICA 5 10 2015-09-11 2 ANO
QUERY
SELECT d.nome, n.nota, n.id_etapa, a.data, c.nome, u.nome
FROM
tbl_notas n, tbl_turmas t, tbl_agendas a, tbl_cursos c,tbl_disciplinas d,
tbl_vinculos v,tbl_usuarios u
WHERE n.id_disciplina = d.id_disciplina
AND n.id_agenda = a.id_agenda
AND t.id_curso = n.id_etapa
AND n.id_etapa = c.id_curso
AND t.id_turma = v.id_turma
AND v.id_user = u.id_user
AND v.id_disciplina = n.id_disciplina
AND n.id_aluno = '10'
AND a.nota = 'SIM'
ORDER BY n.id_etapa DESC, d.nome, n.nota
RESULTADO
nome nota id_etapa data nome nome
FÍSICA 8 10 2015-08-10 2 ANO PROF 001
tbl_vinculo
id_vinculo id_turma id_disciplina id_user
60 15 10 7
61 15 11 NULL
62 15 12 NULL
63 15 13 NULL
64 15 2 NULL
65 15 9 NULL
66 15 3 NULL
67 15 6 NULL
68 15 7 NULL
MEU OBJETIVO
nome nota id_etapa data nome nome
ARTE 8 10 2015-02-26 2 ANO
BIOLOGIA 1 10 2015-02-26 2 ANO
BIOLOGIA 10 10 2015-04-10 2 ANO
EDUCAÇÃO FÍSICA 4 10 2015-03-27 2 ANO
EDUCAÇÃO FÍSICA 10 10 2015-04-10 2 ANO
FÍSICA 8 10 2015-08-10 2 ANO PROF 001
HISTÓRIA 5 10 2015-09-11 2 ANO
QUÍMICA 1 10 2015-08-10 2 ANO
QUÍMICA 5 10 2015-09-11 2 ANO
Agora acho que entendi, só não entendi muito bem a consulta, mas adiciona o LEFT JOIN antes do WHERE:
LEFT JOIN tbl_vinculos v ON v.id_disciplina = n.id_disciplina AND v.id_turma = t.id_turma
LEFT JOIN tbl_usuarios u ON u.id_user = v.id_user
Imagino que funcione, vou aguardar a resposta
kkkk. cara , me ajuda ai na sintaxe. Nao dando de jeito nenhum.
Tenta desse jeito:
SELECT d.nome, n.nota, n.id_etapa, a.data, c.nome, u.nome
FROM
tbl_notas n, tbl_turmas t, tbl_disciplinas d, tbl_agendas a, tbl_cursos c
LEFT JOIN tbl_vinculos v ON v.id_disciplina = n.id_disciplina AND v.id_turma = t.id_turma
LEFT JOIN tbl_usuarios u ON u.id_user = v.id_user
WHERE n.id_disciplina = d.id_disciplina
AND n.id_agenda = a.id_agenda
AND t.id_curso = n.id_etapa
AND n.id_etapa = c.id_curso
AND n.id_aluno = '10'
AND a.nota = 'SIM'
ORDER BY n.id_etapa DESC, d.nome, n.nota
Não sei se da certo...
#1054 - Unknown column 'n.id_disciplina' in 'on clause',
vou tentar aqui.
MEU BROTHER, agradeço pela força.
RESULTADO FINAL
SELECT d.nome, n.nota, n.id_etapa, a.data, c.nome, u.nome
FROM
tbl_disciplinas d, tbl_agendas a, tbl_cursos c,
tbl_notas n
LEFT JOIN tbl_vinculos v ON v.id_disciplina = n.id_disciplina
LEFT JOIN tbl_usuarios u ON u.id_user = v.id_user
LEFT JOIN tbl_turmas t ON v.id_turma = t.id_turma
WHERE n.id_disciplina = d.id_disciplina
AND n.id_agenda = a.id_agenda
AND t.id_curso = n.id_etapa
AND n.id_etapa = c.id_curso
AND n.id_aluno = '10'
AND a.nota = 'SIM'
ORDER BY n.id_etapa DESC, d.nome, n.nota
Show de bola.
Parabéns, ficou bom hein!
vc pode agora ajudar a resolver o meu problema com left join?
To derretendo meu cérebro... rsrsrs
postei hoje um problema desse aqui no forum, mas ninguem respondeu ainda..
Se quiser eu posto aqui também...
Será que pode me ajudar?
Thiago, não consegui achar o seu post.
Acredito que cada curso tenha um professor (id_professor) ou não (NULL) então ficaria assim:
SELECT c.curso, p.nome
FROM tbl_cursos c
LEFT JOIN tbl_professor p ON p.id_professor = c.id_professor
Assim, se existir um professor, ele exibe o nome, senão ele permanece em branco (NULL)