Ir para conteúdo

POWERED BY:

Arquivado

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

edsonxo

busca com IN BOOLEAN MODE

Recommended Posts

Por favor necessito realizar um busca onde existem varios campos de pesquisa, um deles seria pesquisa po palavra mas se não colocar nenhuma palavra a busca não acontece, estou colocando o sistema abaixo:

 

if($tribunal==0){$tribunal="%%";}
         if($estado_tjs==0){$estado_tjs="%%";}
         if($conteudo==0){$conteudo="%%";}
         if($area==0){$area="%%";}
         if($area14==0){$area14="%%";}




   if($busca_var==""){






                $query="select * from tbl_direito WHERE codigo ='1'AND tribunal LIKE '$tribunal' AND estado_tjs LIKE '$estado_tjs'AND area14 LIKE '$area14' AND MATCH (conteudo) AGAINST ('$palavra'IN BOOLEAN MODE)";
                $db->query($query);



   ?>

obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual seria o comportamento desejado?

 

O que acontece. O MySQL tem uma configuração interna que não permitirá retorno para buscas de palavras consideradas "stopwords" ou mesmo palavras que contenham menos que 4 caracteres, ou seja, em um texto, caso você queira buscar a palavra "VIV", você não encontrará, ou melhor, mesmo que tenha um texto em alguma "upla" com a palavra "VIV", esta upla ou linha não será retornada:

 

mysql> create table t1 (
    ->  id int auto_increment primary key,
    ->  nome char(80) not null,
    ->  texto text,
    ->  fulltext(nome,texto)
    -> ) engine=myisam;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t1 set nome ='VIVO TELEFONIA CELULAR', texto ='Por favor necessito de um VIV';
Query OK, 1 row affected (0.00 sec)

mysql> SELECT nome, texto
    -> FROM t1
    -> WHERE MATCH(texto) AGAINST('VIV' IN BOOLEAN MODE);
Empty set (0.02 sec)

Já quando você procura uma string com 4 ou mais caracteres, a coisa vai bem:

 

mysql> create table t1 (
    ->  id int auto_increment primary key,
    ->  nome char(80) not null,
    ->  texto text,
    ->  fulltext(nome,texto)
    -> ) engine=myisam;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t1 set nome ='VIVO TELEFONIA CELULAR', texto ='Por favor necessito de um VIVO';
Query OK, 1 row affected (0.00 sec)

mysql> SELECT nome, texto
    -> FROM t1
    -> WHERE MATCH(texto) AGAINST('VIVO' IN BOOLEAN MODE);
Empty set (0.02 sec)

mysql> SELECT nome, texto
    -> FROM t1
    -> WHERE MATCH(texto) AGAINST('VIVO' IN BOOLEAN MODE);
+------------------------+--------------------------------+
| nome                   | texto                          |
+------------------------+--------------------------------+
| VIVO TELEFONIA CELULAR | Por favor necessito de um VIVO |
+------------------------+--------------------------------+
1 row in set (0.00 sec)

Lembrando a você que não é necessário que exista um índice do tipo FULLTEXT para que seja realizada uma consulta deste tipo em uma coluna de uma tabela no MySQL:

 

mysql> CREATE TABLE t2 (nome char(80)) engine=myisam;
Query OK, 0 rows affected (0.03 sec)

mysql> insert into t2 set nome ='Wagner Bianchi';
Query OK, 1 row affected (0.00 sec)

mysql> insert into t2 set nome ='Marco Bianchi';
Query OK, 1 row affected (0.00 sec)

mysql> SELECT nome FROM t2 WHERE MATCH(nome) AGAINST('Wagner' IN BOOLEAN MODE);
+----------------+
| nome           |
+----------------+
| Wagner Bianchi |
+----------------+
1 row in set (0.00 sec)

Então, finalizando, no seu sistema, defina uma quantidade de caracteres maior que 3 para que a busca possa ser realizada com sucesso.

 

Happy MySQL'ing!! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

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.