Sugestão Query SQL

5 respostas
ale0790

Galera, seguinte estou fazendo a parte de busca de uma loja online aqui, e me ocorre o seguinte problema.

Digamos que eu tenha o produto:

LANTERNA 1055-12 LADO ESQUERDO VOYAGE

Eu quero que quando o cara filtre na busca:

lanterna voyage

Apareça ela como resultado.

É possível fazer?? ou terei que usar palavras chaves ??

Obrigado pela atenção.

5 Respostas

lina

Oi,

Que tal um like upper(’%Lanterna Voyage%’)

Tchauzin!

drsmachado

Ou melhorando o que a nossa camarada lina sugeriu

like upper("%lanterna%voyage%");

Pegando tudo o que tiver lanterna antes de voyage.
Pode criar um or e inverter a ordem (no caso acima, encontrará tudo o que tem lanterna e depois voyage, independente do que venha antes de lanterna, depois da mesma e antes de voyage e depois de voyage).

A

Há algumas formas de se resolver isso.

Para algo mais simples você poderia utilizar um like diretamente:

SELECT campos FROM tabela WHERE campo LIKE '%lanterna%voyage%'

Repare que é necessário colocar um % entre as duas palavras digitadas pra te retornar o resultado desejado.

E na ampla maioria dos bancos de dados, você precisa garantir que tanto o termo procurado quanto armazenado estejam ambos em maiuscula ou minúscula (pode usar uma função para converter na hora da query)

Se você quiser que esse produto apareça mesmo quando o usuário digitar: voyage lanterna
(Eu como usuário esperaria isso, afinal não sei em que ordem você cadastra as coisas)

SELECT campos FROM tabela WHERE campo LIKE '%lanterna%' AND  campo LIKE '%voyage%'

Ou seja, tem que quebrar cada palavra do que ele digitou, e montar um like para cada.

Claro que nesta hora você tá acabando com a performance da query.

Para obter uma boa performance, com esse tipo de flexibilidade, deveria partir para uma ferramenta de full-search text ( eu recomendo).

Você pode usar o suporte nativo do seu banco (se ele oferecer) ou utilizar o do hibernate.

ale0790

É acabei de notar que se o usuário digitar 3,4 palavras ou mais o negocio fica meio complicado, vou dar uma pesquisada sobre esse full-search text.

Obrigado a todos que ajudaram.

F

existe um conceito chamado pesquisa fonetica.

http://www.macoratti.net/sql_sdex.htm

a primeira vista, parece complicado e desnecessario, mais no final o trabalho é valido.
#ficadica

Criado 26 de janeiro de 2012
Ultima resposta 26 de jan. de 2012
Respostas 5
Participantes 5