Ir para conteúdo

POWERED BY:

Arquivado

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

Guariento

Verificar se campo contém determinada informação

Recommended Posts

Prezados, em uma tabela chamada CONTATOS eu criei um campo chamado TIPO_DE_CONTATO (varchar). Neste campo eu armazeno a informação de ID de uma terceira tabela chamada de TIPOS_CONTATOS, exemplo:

 

Tabela: TIPOS_CONTATOS

id 1 = Fornecedor

id 2 = Cliente

id 10 = Transportadora

id 11 = Vendedor

id 12 = Funcionario terceirizado

 

Então, ao criar um registro na minha tabela de CONTATOS, eu armazeno no campo CONTATOS.TIPO_DE_CONTATO algo como: "1; 2; 10; 11; 12;".

 

Enfim, até aqui tudo tranquilo. Agora minha dúvida é como pesquisar dentro deste campo, exemplo: se eu quiser saber quais são os registros da tabela de CONTATOS que contém em CONTATOS.TIPO_DE_CONTATO a informação referente ao "Fornecedor" (ou seja, id 2), como eu faço?

 

Basta eu usar INSTR no WHERE?

 

Minha dúvida: usei INSTR, mas já que CONTATOS.TIPO_DE_CONTATO é VARCHAR, ele identifica os seguintes registros: "2; 12" pois todos estes contém número "2".

 

Sugestões de como localizar esta informação da forma correta?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde amigo,

 

Bad bad, eu faria uma tabela para relacionar essas duas. Por exemplo, se o contato de ID 1 tem 3 tipos de contatos (5, 7 e 9), nessa tabela haveriam 3 linhas relacionando o ID 1 do contato com cada tipo de contato.

 

Se precisar de exemplos melhores é só pedir, abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta e Diego, agradeço. Sei que é a melhor forma fazer uma tabela extra, entretanto, estou tentando corrigir o problema de um sistema já pronto. Sei que posso fazer esta análise via código fonte da aplicação dando um split no conteúdo e analisando o array gerado, item a item.

 

Mas considerando que eu não posso alterar a estrutura do sistema acrescentando esta tabela extra e nem adicionar essa análise via um "split", ou seja, sendo eu forçado a trabalhar da forma como eu citei no exemplo, qual melhor maneira de se fazer esta análise sem que os erros que citei aconteçam?

 

Até pensei em colocar no INSTR a informação seguinte, exemplo: "2;" , número dois seguido do ponto e vírgula, MAS tem um porém, se o número 2 for o último da lista, ele não é seguido do ponto e vírgula (ex: "2; 12"), então um erro pode acontecer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom amigo, a última vez que lembro de ter visto algo assim foi nesse tópico aqui.

 

Não sei se pode ser a maneira mais simples de se fazer, e não obtive resposta do autor do tópico, mas nas minhas simulações essa Procedure funcionou. Espelhe-se nela, nas rotinas que separam os valores do campo VARCHAR, e tente desenvolver uma pro seu caso.

 

Como disse, não sei se é a forma mais simples, mas se precisar de ajuda estamos aí. Quem sabe alguém tenha uma solução melhor.

 

Abraço.

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.