Ir para conteúdo

POWERED BY:

Arquivado

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

Kimura

Consulta campo multivalorado

Recommended Posts

Olá,

 

Tenho o seguinte problema:

 

Uma coluna da tabela guarda valores separados por vírgula, parecido com estes: dar_1, cur_3, ece_8

 

Preciso fazer uma consulta, pegando todas as informações de somente 1 destes códigos.

 

Ex.: O cara disse que o código que ele quer é cur_5, preciso consultar a tabela e pegar todos os resultados onde este cur_5 existe, indiferente se existe só ele ou está junto com outros.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O like não resolve o problema?

 

select *
from tabela
where campo like '%cur_5%'

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Chrnos,

 

Obrigado por responder, o LIKE resolve sim, mas fiquei pensativo na questão do desempenho.

 

Se você tiver mais possibilidades me responda por gentileza. Lembrando que hoje a modelagem é esta.

 

Vlw.

Compartilhar este post


Link para o post
Compartilhar em outros sites

...

 

O correto seria você ter uma tabela a parte 1-N , campo multivalorado eh uma ofensa ao banco normalmente, e fazer join das duas num momento de consulta.

 

Mas como você disse a modalgem eh essa, você poderia usar tambem match_against() e full text index.

Compartilhar este post


Link para o post
Compartilhar em outros sites

giesta,

 

Perdoe reabrir este tópico, mas não consegui resolver definitivamente a situação.

 

Como você mesmo falou é verdade, a modelagem deste banco está realmente uma porcaria, mas nem sempre podemos mexer em tudo, não é?

 

Futuramente vou sugerir todas as correções possíveis.

 

Vou dar um exemplo da situação real:

 

- Um site possui um código particular, por exemplo cur_4

 

- Preciso puxar as notícias relativas a este site, mas as notícias estão sendo gravadas da forma multivalorada, ou seja,

cur_4,cur_28,dar_80,cur_40,cur_48 etc.

 

Se eu fizer um LIKE '%cur_4%' ele vai pegar tudo que se parece com isso, correto? até mesmo, cur_40, cur_48 dentre outros ...

 

Preciso achar um solução pra esse problemão que me puseram na mão, preciso muito da tua força.

 

Obs.: O REGEXP '[[:<:]]cur_4[[:>:]]' seria uma possível solução?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

LIKE '%cur_4,%'

 

 

Mas como já foi dito sem a separação devida quase toda solução vai esbarrar na questão da performance.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Motta,

 

Pois é, a sua dica até funcionaria se tivesse sempre mais de um valor no campo, mas existem casos que só tenho um único valor, daí sem vírgula.

 

Também estou preocupado com a questão performance, mas, por enquanto, não posso fazer nada, está acima de mim esta decisão.

 

Obrigado.

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.