GARANTIR DESCONTO

Fórum Exibindo resultado de consulta a dois campo diferentes da mesma tabela. #563826

10/10/2016

0

Amigo, bom dia!

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

Myller Meireles

Responder

Post mais votado

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:

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

William Alves
Responder

Gostei + 1

Mais Posts

10/10/2016

Luiz Santos

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
Responder

Gostei + 0

10/10/2016

William Alves

Retificando*:

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
Responder

Gostei + 0

10/10/2016

Myller Meireles

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

Gostei + 0

10/10/2016

Luiz Santos

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.

Retificando*:

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
Responder

Gostei + 0

10/10/2016

Myller Meireles

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

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

Responder

Gostei + 0

10/10/2016

Luiz Santos

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

Responder

Gostei + 0

10/10/2016

Myller Meireles

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? :-)
Responder

Gostei + 0

10/10/2016

Myller Meireles

Exato, Luiz!

Não aparece nada!

Como pode isso, se temos dados nos referidos campos?
Responder

Gostei + 0

10/10/2016

Luiz Santos

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

Gostei + 0

10/10/2016

William Alves

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í


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

Gostei + 0

10/10/2016

William Alves

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

Gostei + 0

10/10/2016

Myller Meireles

Luiz...

Vou aplicar sua sugestão e lhe aviso se deu certo!

Mais uma vez, obrigado!
Responder

Gostei + 0

10/10/2016

Myller Meireles

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

Gostei + 1

11/10/2016

Myller Meireles

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

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar