Ir para conteúdo

Arquivado

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

theteo

Left Join

Recommended Posts

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

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

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

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
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

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

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

#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

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

×

Informação importante

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