Exibindo resultado de consulta a dois campo diferentes da mesma tabela.
Amigo, bom dia!
Tenho a seguinte consulta SQL:
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!
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
Curtidas 0
Melhor post
William Alves
10/10/2016
Bom dia Myller Meireles,
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:
Ou se são identificadores (Id) de outras tabelas e estão na tabela 'montar_turma' como chaves estrangeiras faça o seguinte:
Testa e me avisa se deu certo ok?
Abraço!
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!
GOSTEI 1
Mais Respostas
Luiz Santos
10/10/2016
Myller
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
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
William Alves
10/10/2016
Retificando*:
Ou se são identificadores (Id) de outras tabelas e estão na tabela 'montar_turma' como chaves estrangeiras faça o seguinte:
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
Myller Meireles
10/10/2016
Olá Luiz, boa tarde!
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í
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
Luiz Santos
10/10/2016
Cara, esses dois dados estão na mesma tabela?
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.
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.
Retificando*:
Ou se são identificadores (Id) de outras tabelas e estão na tabela 'montar_turma' como chaves estrangeiras faça o seguinte:
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
Myller Meireles
10/10/2016
Olá William Alves, boa tarde!
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!
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
Luiz Santos
10/10/2016
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
Luiz Santos
10/10/2016
Supondo que não haja "match" entre freq_curso e freq_md_curso não vai retornar nada.
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
Myller Meireles
10/10/2016
Luiz,
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? :-)
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
Myller Meireles
10/10/2016
Exato, Luiz!
Não aparece nada!
Como pode isso, se temos dados nos referidos campos?
Não aparece nada!
Como pode isso, se temos dados nos referidos campos?
GOSTEI 0
Luiz Santos
10/10/2016
Você pode pegar seu código e colocar o OR em vez de AND.
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.
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
William Alves
10/10/2016
Olá Luiz, boa tarde!
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í
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
William Alves
10/10/2016
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.
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!
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
Myller Meireles
10/10/2016
Luiz...
Vou aplicar sua sugestão e lhe aviso se deu certo!
Mais uma vez, obrigado!
Vou aplicar sua sugestão e lhe aviso se deu certo!
Mais uma vez, obrigado!
GOSTEI 0
Myller Meireles
10/10/2016
William,
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...
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
Myller Meireles
10/10/2016
Fala Luiz....
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!
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
Myller Meireles
10/10/2016
Oi William, blza?!
Não, o identificador da tabela é o "freq_id". Os campos freq_curso e freq_md_curso são campos "VARCHAR". Mas o objetivo está correto!
Fuçando o código da consulta e testando após vários erros, consegui resolver em 100% usando o seguinte código:
De acordo com a ajuda que o amigo Luiz Santos também contribuiu, sobre o "OR" na consulta.
O que eu fiz foi colocar logo após o WHERE o "freq_md_md = 'MatDidatico' and..." e aí sim, só é exibido os registros necessários.
Agradeço a você, William Alves e Luiz Santos pela grande e valiosa ajuda e pelo tempo a mim dispensado!
Valeu!!!
Não, o identificador da tabela é o "freq_id". Os campos freq_curso e freq_md_curso são campos "VARCHAR". Mas o objetivo está correto!
Fuçando o código da consulta e testando após vários erros, consegui resolver em 100% usando o seguinte código:
SELECT freq_id, freq_curso_curso, freq_md_curso, freq_md_disc, freq_md_prof, freq_md_mat_didat, freq_md_md FROM montar_turma WHERE freq_md_md = 'MatDidatico' and freq_curso_curso LIKE '%17%' or freq_md_curso LIKE '%17%' ORDER BY freq_id DESC
De acordo com a ajuda que o amigo Luiz Santos também contribuiu, sobre o "OR" na consulta.
O que eu fiz foi colocar logo após o WHERE o "freq_md_md = 'MatDidatico' and..." e aí sim, só é exibido os registros necessários.
Agradeço a você, William Alves e Luiz Santos pela grande e valiosa ajuda e pelo tempo a mim dispensado!
Valeu!!!
GOSTEI 0
Luiz Santos
10/10/2016
Precisando só postar sua duvida.
Grande abraço
Luiz
Grande abraço
Luiz
GOSTEI 0
William Alves
10/10/2016
Oi William, blza?!
Não, o identificador da tabela é o "freq_id". Os campos freq_curso e freq_md_curso são campos "VARCHAR". Mas o objetivo está correto!
Fuçando o código da consulta e testando após vários erros, consegui resolver em 100% usando o seguinte código:
De acordo com a ajuda que o amigo Luiz Santos também contribuiu, sobre o "OR" na consulta.
O que eu fiz foi colocar logo após o WHERE o "freq_md_md = ''MatDidatico'' and..." e aí sim, só é exibido os registros necessários.
Agradeço a você, William Alves e Luiz Santos pela grande e valiosa ajuda e pelo tempo a mim dispensado!
Valeu!!!
Não, o identificador da tabela é o "freq_id". Os campos freq_curso e freq_md_curso são campos "VARCHAR". Mas o objetivo está correto!
Fuçando o código da consulta e testando após vários erros, consegui resolver em 100% usando o seguinte código:
SELECT freq_id, freq_curso_curso, freq_md_curso, freq_md_disc, freq_md_prof, freq_md_mat_didat, freq_md_md FROM montar_turma WHERE freq_md_md = ''MatDidatico'' and freq_curso_curso LIKE ''%17%'' or freq_md_curso LIKE ''%17%'' ORDER BY freq_id DESC
De acordo com a ajuda que o amigo Luiz Santos também contribuiu, sobre o "OR" na consulta.
O que eu fiz foi colocar logo após o WHERE o "freq_md_md = ''MatDidatico'' and..." e aí sim, só é exibido os registros necessários.
Agradeço a você, William Alves e Luiz Santos pela grande e valiosa ajuda e pelo tempo a mim dispensado!
Valeu!!!
Obrigado!
GOSTEI 0