theteo 0 Denunciar post Postado Abril 16, 2014 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_usuariosid_user / nome tbl_turmas id_turma / id_cursotbl_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. Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Abril 16, 2014 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) Compartilhar este post Link para o post Compartilhar em outros sites
theteo 0 Denunciar post Postado Abril 17, 2014 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 Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Abril 17, 2014 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? Compartilhar este post Link para o post Compartilhar em outros sites
theteo 0 Denunciar post Postado Abril 17, 2014 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. Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Abril 17, 2014 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? Compartilhar este post Link para o post Compartilhar em outros sites
theteo 0 Denunciar post Postado Abril 17, 2014 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. Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Abril 17, 2014 Adicionando as tabelas tbl_usuario e tbl_vinculos não deu certo? Compartilhar este post Link para o post Compartilhar em outros sites
theteo 0 Denunciar post Postado Abril 17, 2014 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 Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Abril 17, 2014 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 Compartilhar este post Link para o post Compartilhar em outros sites
theteo 0 Denunciar post Postado Abril 17, 2014 kkkk. cara , me ajuda ai na sintaxe. Nao dando de jeito nenhum. Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Abril 17, 2014 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... Compartilhar este post Link para o post Compartilhar em outros sites
theteo 0 Denunciar post Postado Abril 17, 2014 #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. Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Abril 17, 2014 Parabéns, ficou bom hein! Compartilhar este post Link para o post Compartilhar em outros sites
Thiago Dell Agnesi 0 Denunciar post Postado Abril 18, 2014 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? Compartilhar este post Link para o post Compartilhar em outros sites
theteo 0 Denunciar post Postado Abril 18, 2014 Thiago, não consegui achar o seu post. Compartilhar este post Link para o post Compartilhar em outros sites
Thiago Dell Agnesi 0 Denunciar post Postado Abril 23, 2014 Olá Theteo.. Segue o link aqui do forum: http://forum.imasters.com.br/topic/519723-left-join/ Compartilhar este post Link para o post Compartilhar em outros sites