Fórum Exibindo resultado de consulta a dois campo diferentes da mesma tabela. #563826
10/10/2016
0
Tenho a seguinte consulta SQL:
SELECT freq_id, freq_curso, freq_md_curso, freq_md_disc, freq_md_prof, freq_md_mat_didat FROM montar_turma WHERE freq_curso LIKE '%17%' AND freq_md_curso LIKE '%17%' ORDER BY freq_id DESC
Preciso que todos os registros do campo "freq_curso" sejam exibidos quando ele for igual ao campo "freq_md_curso". Para isso, preciso criar outras consultas alterando apenas o número da LIKE, que no exemplo eu coloquei 17. O número 17 refere-se ao número de cadastro do curso, e para cada curso, um número diferente, claro.
Desde já, agradeço!
Myller Meireles
Curtir tópico
+ 0Post mais votado
10/10/2016
Os campos freq_md_curso e freq_curso são chaves primárias de quais tabelas?
Se esses dois campos são da mesma tabela então faça o seguinte:
SELECT freq_id, freq_curso, freq_md_curso, freq_md_disc, freq_md_prof, freq_md_mat_didat FROM montar_turma WHERE freq_curso = freq_md_curso ORDER BY freq_id DESC
Ou se são identificadores (Id) de outras tabelas e estão na tabela 'montar_turma' como chaves estrangeiras faça o seguinte:
SELECT freq_id, freq_curso, freq_md_curso, freq_md_disc, freq_md_prof, freq_md_mat_didat FROM montar_turma INNER JOIN TABELA_FREQUENCIA_CURSO AS TFC ON TABELA_FREQUENCIAQ_MD_CURSO AS TFMC ON TFC.freq_curso = TFMC.freq_md_curso ORDER BY freq_id DESC
Testa e me avisa se deu certo ok?
Abraço!
William Alves
Gostei + 1
Mais Posts
10/10/2016
Luiz Santos
Não entendi muito bem sua duvida.
Poderia explicar melhor?
Pelo que entendi, não seria só usar um IN em vez do LIKE?
Grande abs
Gostei + 0
10/10/2016
William Alves
Ou se são identificadores (Id) de outras tabelas e estão na tabela 'montar_turma' como chaves estrangeiras faça o seguinte:
SELECT freq_id, freq_curso, freq_md_curso, freq_md_disc, freq_md_prof, freq_md_mat_didat FROM montar_turma as MT INNER JOIN TABELA_FREQUENCIA_CURSO AS TFC ON TFC.freq_curso = MT.freq_curso INNER JOIN TABELA_FREQUENCIAQ_MD_CURSO AS TFMC ON TFC.freq_curso = TFMC.freq_md_curso ORDER BY freq_id DESC
Gostei + 0
10/10/2016
Myller Meireles
Obrigado por me responder!
O comando SQL que citei funciona, mas não me traz o que preciso, que é o seguinte:
O que preciso é que quando um aluno estiver na turma 17 (freq_curso), seja exibido todos os materiais didáticos correspondentes ao curso no qual ele está cadastrado (freq_md_curso).
Quando executo a consulta que postei, o MySQL me retorna a mensagem: "MySQL não retornou nenhum registro". Mas sendo que tenho registros nos referidos campos que possibilitariam a exibição do resultado que espero.
Espero ter sido claro.
E aí
Gostei + 0
10/10/2016
Luiz Santos
Estranho....
É possivel um curso 15, por exemplo possuir materiais do 16 além do 15? (por exemplo).
Acho que para o seu caso, a melhor solução é essa segunda que o Willian postou.
Ou se são identificadores (Id) de outras tabelas e estão na tabela 'montar_turma' como chaves estrangeiras faça o seguinte:
SELECT freq_id, freq_curso, freq_md_curso, freq_md_disc, freq_md_prof, freq_md_mat_didat FROM montar_turma as MT INNER JOIN TABELA_FREQUENCIA_CURSO AS TFC ON TFC.freq_curso = MT.freq_curso INNER JOIN TABELA_FREQUENCIAQ_MD_CURSO AS TFMC ON TFC.freq_curso = TFMC.freq_md_curso ORDER BY freq_id DESC
Gostei + 0
10/10/2016
Myller Meireles
Grato por sua resposta!
Os campos freq_md_curso e freq_curso não são chaves primárias. São campos do tipo VARCHAR da tabela "montar_turma". A chave primária dessa tabela é o campo freq_id.
Quando aplico a sua sugestão de código, o MySQL retorna um conjunto vazio. Mesmo tendo nos campos "freq_md_curso" e "freq_curso" os dados do referido curso que pudesse me trazer um resultado satisfatório.
Você teria outra sugestão?
Obrigado!
Gostei + 0
10/10/2016
Luiz Santos
SELECT freq_id, freq_curso, freq_md_curso, freq_md_disc, freq_md_prof, freq_md_mat_didat
FROM montar_turma
WHERE freq_curso = freq_md_curso
AND freq_curso = '17'
ORDER BY freq_id DESC
Gostei + 0
10/10/2016
Luiz Santos
SELECT freq_id, freq_curso, freq_md_curso, freq_md_disc, freq_md_prof, freq_md_mat_didat
FROM montar_turma
WHERE freq_curso = freq_md_curso
AND freq_curso = '17'
ORDER BY freq_id DESC
Gostei + 0
10/10/2016
Myller Meireles
Sim, estão na mesma tabela!
Sobre sua pergunta sobre o material do curso 15 no 16, digo que não. Pois quando eu cadastro o material didático, eu informo para qual curso ele será disponibilizado.
A segunda que o William postou seria interessante seu eu estivesse trabalhando com chave estrangeira, mas não.
Tens alguma outra ajuda? :-)
Gostei + 0
10/10/2016
Myller Meireles
Não aparece nada!
Como pode isso, se temos dados nos referidos campos?
Gostei + 0
10/10/2016
Luiz Santos
Assim ele vai trazer se qualquer um dos campos contiver o valor 17.
No original, ele só vai trazer se os dois tiverem o valor 17 ao mesmo tempo.
Gostei + 0
10/10/2016
William Alves
Obrigado por me responder!
O comando SQL que citei funciona, mas não me traz o que preciso, que é o seguinte:
O que preciso é que quando um aluno estiver na turma 17 (freq_curso), seja exibido todos os materiais didáticos correspondentes ao curso no qual ele está cadastrado (freq_md_curso).
Quando executo a consulta que postei, o MySQL me retorna a mensagem: "MySQL não retornou nenhum registro". Mas sendo que tenho registros nos referidos campos que possibilitariam a exibição do resultado que espero.
Espero ter sido claro.
E aí
Myller Meireles,
De acordo com o post acima o identificador da turme é o campo 'freq_curso', e o identificador do curso é o freq_md_curso, e o objetivo é exibir todos os materiais didáticos correspondentes ao curso(freq_md_curso) certo?
Se for isso provavelmente você montou uma tabela assim:
freq_curso freq_md_curso
17 1
17 2
17 3
E assim vai....
Mas percebe que a turma (freq_curso) está relacionada a vários cursos ( freq_md_curso), ou seja, se o aluno pertence a turma 17 logo ele herdara o curso 1, 2 e 3 e esses cursos possuem materiais didáticos relacionados a eles, logo precisaria de pelo menos uma tabela que representaria os Materiais didáticos para conseguirmos linkar.
Mas o ideal mesmo seria você reestruturar seu banco e criar uma Tabela para a Turma, Curso e Materiais Didáticos e fazer os devidos links utilizando Foreign key e fazer os INNER JOIN como disse o Luiz Santos.
Mas se você já não pode mais reestruturar seu banco, poderia mandar aqui nos comentários o resultado de uma pesquisa com todos os campos e especificando o que significa cada campo? Pq a partir disso conseguiremos te ajudar melhor com mais clareza.
Abraço!
Gostei + 0
10/10/2016
William Alves
De acordo com o post acima o identificador da turme é o campo 'freq_curso', e o identificador do curso é o freq_md_curso, e o objetivo é exibir todos os materiais didáticos correspondentes ao curso(freq_md_curso) certo?
Se for isso provavelmente você montou uma tabela assim:
freq_curso freq_md_curso
17 1
17 2
17 3
E assim vai....
Mas percebe que a turma (freq_curso) está relacionada a vários cursos ( freq_md_curso), ou seja, se o aluno pertence a turma 17 logo ele herdara o curso 1, 2 e 3 e esses cursos possuem materiais didáticos relacionados a eles, logo precisaria de pelo menos uma tabela que representaria os Materiais didáticos para conseguirmos linkar.
Porém o ideal mesmo seria você reestruturar seu banco e criar uma Tabela para a Turma, Curso e Materiais Didáticos e fazer os devidos links utilizando Foreign key e fazer os INNER JOIN como disse o Luiz Santos.
Mas se você já não pode mais reestruturar seu banco, poderia mandar aqui nos comentários o resultado de uma pesquisa com todos os campos e especificando o que significa cada campo? Pq a partir disso conseguiremos te ajudar melhor com mais clareza.
Abraço!
Gostei + 0
10/10/2016
Myller Meireles
Vou aplicar sua sugestão e lhe aviso se deu certo!
Mais uma vez, obrigado!
Gostei + 0
10/10/2016
Myller Meireles
Obrigado pelo retorno!
Vou colocar isso em prática amanhã com mais calma e informo para vc os campos e os seus significados.
Realmente deixei de dar alguma informações importantes para que vcs pudessem me ajudar da maneira correta.
Valeu...
Gostei + 1
11/10/2016
Myller Meireles
Cara, deu certo (finalmente) colocando o "OR" que vc sugeriu!
Com isso, todos os Materiais Didáticos (MD) correspondentes ao curso 17 são exibidos. Agora o problema é que nessa tabela (montar_turma), eu tenho mais de 6.000 registros eles são exibidos na consulta em branco, conforme o link: http://donabeldade.com.br/images/mysql.jpg
Como resolver a exibição desses campos em branco, mostrando apenas os campos que estão com os MDs cadastrados?
Já tentei usar no "WHERE" o "<>" mas não rolou!
Obrigado pela ajuda!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)