Ir para conteúdo

POWERED BY:

Arquivado

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

tamura

Busca inteligente (?)

Recommended Posts

Olá povo!

 

Eu não sei qual seria o termo certo (se é que existe um nome para este tipo de coisa) para aquelas pesquisas onde o usuário digita dois termos (duas palavras) e, nos resultados da busca, retornam todos os registros que possuem estes termos. Por exemplo:

 

Tabela de clientes:

 

Nome

Paulo Rodrigues Machado

Rodrigo da Silva

Mônica Silvana Amorim

Bruno Xavier

João Pedro Ferreira

Luiz Paulo Coelho

 

O usuário pesquisa pelo nome do cliente porém ele sabe só o primeiro nome e o sobrenome:

Paulo Machado

 

... e o sistema retornará dois registros:

 

Paulo Rodrigues Machado

Luiz Paulo Coelho

 

Existe um nome para esta técnica? Na realidade não sei nem que termos utilizar no Google para pesquisar este tipo consulta.

 

O que posso imaginar é que o procedimento desta consulta, utilizando um PHP + MySQL, seria dar um explode pelo campo em branco...

 

$termos = explode(" ",$palavra_busca);

 

... logo após um foreach...

 

$query_completa = "(0 ";

foreach($termos as $key => $palavra){

   $query_completa .= " OR nome LIKE ('%$palavra%') ";

}

$query_completa .= ")";

 

... e depois a consulta em si...

 

mysql_query("SELECT * FROM clientes WHERE 1 $query_completa");

Ou será que possa haver um procedimento mais adequado para esta técnica?

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites
$termo = 'Paulo'; // Vindo de um formulário
$SQL   = "SELECT * FROM `clientes` WHERE ((`nome` LIKE '%".$termo."%') OR (`sobrenome` LIKE '%".$termo."%'))";
$query = mysql_query($SQL) or die(mysql_error());

Vai retornar:

 

"Paulo Valério"

"João Paulo"

"o nome dele era Paulo"

"Paulo era como ele se chamava"

"pAuLo" // Retorna também

"paulo Barreto" // Strings em minúsculo também

 

Toda string que conter Paulo será retornada pela sua consulta.

 

Lembrando que você pode adicionar quantos campos mais quiser para usar com o LIKE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta, é isso mesmo que eu estava procurando! Realmente nunca imaginaria que existia esta função no MySQL! Realmente, muito obrigado!

 

Vi que este método MATCH e AGAINST é bem performático e prático para codificar, mas vejo que terei de atualizar o meu MySQL pois estes recursos funcionam a partir do 5.6, tanto para MySAM como para InnoDB.

 

Wanderson, este método que postastes já conhecia, mas mesmo assim obrigado pela força.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tamura,

 

A engine MyISAM suporta FULLTEXT INDEX desde a versão 3.23.23 do MySQL.

 

Ah sim, eu havia escrito...

 

pois estes recursos funcionam a partir do 5.6, tanto para MySAM como para InnoDB.

 

Na realidade me expressei mal, como também utilizo InnoDB, para aplicar o FULLTEXT INDEX terei que atualizar para 5.6.

 

"Full-text indexes can be used only with MyISAM tables. (In MySQL 5.6 and up, they can also be used with InnoDB tables.) Full-text indexes can be created only for CHAR, VARCHAR, or TEXT columns." (http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html)

 

Desculpe, mas grato!

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.