Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
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.
...
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.
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:
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.
LIKE '%cur_4,%'
Mas como já foi dito sem a separação devida quase toda solução vai esbarrar na questão da performance.
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.
O like não resolve o problema?
select *
from tabela
where campo like '%cur_5%'
[]'s