Ir para conteúdo

Arquivado

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

mb_hard

Problema busca com LIKE %%

Recommended Posts

Ola amigos, tudo bem!!

 

Estou com o seguinte problema, eu tenho um anuncio exemplo: Gol 2.0 GTI 16V se eu buscar por gol 2.0 aparece o anuncio sem problema, agora se eu digitar gol gti não aparece nada, ou seja, a busca não aceita pular uma palavra, só busca por sequencia, estou com o seguinte código abaixo:

$busca---ome="(TV.tipo LIKE '%$nome%' OR 
               MA.marca LIKE '%$nome%' OR 
               MD.modelo LIKE '%$nome%' OR 
               V.versao LIKE '%nome%' OR 
               CONCAT(MA.marca,' ',MD.modelo) LIKE '%$nome%' OR 
               CONCAT(MA.marca,' ',MD.modelo,' ', V.Versao) LIKE '%$nome%' OR 
               CONCAT(MD.modelo,' ', V.Versao) LIKE '%$nome%' OR 
               CONCAT(MA.marca,' ',MD.modelo,' ',ANO.ano) LIKE '%$nome%' OR 
               CONCAT(MD.modelo,' ',ANO.ano) LIKE '%$nome%' OR 
               CONCAT(V.versao,' ',ANO.ano) LIKE '%$nome%') ";

Alguém poderia me ajudar como fazer a busca sem a ordem de palavras?

 

Agradeço desde ja a todos, abraço.

Murillo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use o UPPER nos dois lados do LIKE para evitar upper e lowercase, talvez seja este seu problema

upper(TV.tipo) LIKE upper('%$nome%') OR

Agora se existem tabelas separadas para modelo , marca , ano etc não seria melhor oferecer objetos do tipo ComboBox oferendo estas opções ao usuário , a busca final ficaria mais limpa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta muito obrigado pelo retorno, então eu queria a busca sem ComboBox, porque na verdade é uma busca rapida por palavra, só que eu queria que a busca não respeitasse ordem das palavras e sim o que procurasse aparecesse fora de ordem, exemplo a busca do mercado livre.

 

utilizei o upper porém não tive diferença, na verdade não tem diferenciação da busca por letra maiúscula ou minuscula, a busca ocorre normal das duas formas, o problema é que só busca na sequencia as palavras e não fora de ordem infelizmente. Tem alguma outra sugestão?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aceite o texto livre em um edit.

Separe cada palavra da string em um array

Faça a busca com upper dos dois lados para cada coluna e palavra

Algo como

 

 

Edit [gol 2.0 gti 16v]

 

Where

(Upper(tipo) like upper('%gol%') or upper(tipo) like upper('2.0') ...)

Or

(Upper(marca) ... )

 

Montando a sql de forma dinamica

Com o devido cuidado do sql injection

 

O concat não é necessário pois o OR resolve

 

O UPPER faz diferença com certeza

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.