edsonxo 0 Denunciar post Postado Agosto 6, 2009 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
Wagner Bianchi 0 Denunciar post Postado Agosto 7, 2009 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