Ir para conteúdo

POWERED BY:

Arquivado

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

BRG

Problema LIKE com varios termos

Recommended Posts

Bom dia pessoal!

Estou com um problema ao realizar selects no MySql.

 

Imaginem a seguinte situação:

Tenho uma tabela onde contém nomes de produtos e um sistema de busca em php.

 

Na base um dos produtos chama-se "Carrinho de brinquedo estilo Ferrari".

Digamos que faço uma busca pelos termos "Carrinho Ferrari".

 

Fiz o SQL desta maneira:

SELECT * FROM produtos WHERE nome LIKE '%Carrinho Ferrari%' LIMIT 20

Este select não retornou nenhum registro.

 

Então fiz outro SQL desta maneira:

SELECT * FROM produtos WHERE nome LIKE '%Carrinho%Ferrari%' LIMIT 20

Este select me retornou o produto que eu queria, porém, o tempo de consulta aumentou muito.

 

Tenho na base mais de 2000 registros de produtos, separados por categoria. Quando o usuário busca em TODAS AS CATEGORIAS, utilizando o segundo exemplo acima, o tempo é muito grande.

 

Alguém teria alguma sugestão de como eu posso otimizar essa busca, ou seja, que ela funcione, porém de uma maneira rápida??

 

Se puderem me ajudar, ficarei imensamente agradecido!

 

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A forma correta e performática de se fazer buscas textuais em SQL é utilizando um índice FULLTEXT.

 

Lembrando que só funciona em tabelas MyISAM

 

CREATE FULLTEXT INDEX nome_do_indice ON nome_da_tabela (nome_da_coluna)

 

e finalmente seu SQL deve ser alterado para utilizar o índice

 

SELECT coluna1, coluna2, colunaN FROM tabela1, tabelaN WHERE MATCH (coluna_com_indice) AGAINST ('texto a ser pesquisado')

 

Este link contém algumas informações úteis para seu problema

http://www.petefreitag.com/item/477.cfm

Compartilhar este post


Link para o post
Compartilhar em outros sites

uma das palavras

 

(campo like '%carrinho%' 
or
campo like '%ferrari%')

 

ambas

 

(campo like '%carrinho%' 
and
campo like '%ferrari%')

 

Isto usando o like, mas o Mysql tem o Match que talvez seja melhor neste caso.

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.