Ir para conteúdo

POWERED BY:

Arquivado

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

spiderx

Procura em Banco de Dados Mysql

Recommended Posts

A questão é a seguinte, utilizando a sintaxe:

$SQL = "SELECT * FROM artigos WHERE titulo LIKE '%$string%'";
ele efetua a busca e me retorna os registros onde contem a a string em qualquer posição do registro, ex: se eu tenho no registro: "Papa faz aparição pública." e o usuário faz a busca pela palavra "papa" ele me retorna o registro, mas se o usuário buscar por "papa aparição" ele não me retorna nada(lógico), não existe a sequencia a ser pesquisada, até ai tudo bem, o script utilizando este select funciona mas não me atende, queria que ele efetuasse a busca e me retornasse o registro, pois as duas palavras existem no registro.

 

Continuei pesquisando e encontrei este código em um fórum(não me recordo onde, desculpe o autor do código):

 

$p = explode(" ", $string);for($i=0; $i<count($p); $i++){$resultado = mysql_query("SELECT autor FROM artigos WHERE autor LIKE '%$p[$i]%'"); while($reg = mysql_fetch_row($resultado)) $msg_final .= $reg[0]."<br>";}
funciona quase que 100%, o problema é que se eu efetuar a busca utilizando o exemplo acima, ele me retorna o resultado correto, mas imprime duas vezes, pois existem as duas palavras no registro.

 

Como solucionar o problema para efetuar a busca em um campo da tabela, mas tratando o fato do usuário estar digitando conjuntos de palavras para a busca?

 

Obrigado!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma forma rápida que vejo aqui eh jogando as palavras em um vetor e fazendo esta busca usando o OR/AND junto com o LIKE.Por exemplo, o usuario digita papa+teste, você separa (explode) isso em uma variável, daí faz um loop para montar sua string de sql.Vê se conseguiu captar o que falei, qualquer coisa posta novamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

axu que não entendi muito bem !

quando voce usa o like assim

 

LIKE '%$string%'";

Você busca por toda a palavra !"

 

Mas se voce colocar apenas um coringa (%) so ele so busca pela palavra completa testa e coloca assim !

 

$SQL = "SELECT * FROM artigos WHERE titulo LIKE '%$string'";

 

 

 

ATT :KADU http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim consegui captar o que disse, mas se reparar o segundo code postado, ele faz exatamente isso , o problema é o seguinte, ao fazer isso ele me retorna dois resultados de mesmo valor. repetindo o exemplo:Existem vários registros, no banco de dados , onde entre eles um contem a fraze:"Faz um mês que o papa foi escolhido"Se efetuar a busca por "papa escolhido"(sem aspas) ele me retorna dois resultados de busca, mostrando o mesmo registro 2 vezes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nerdão, conto respeito:Ex registro: "Papa faz aparição pública."Busca por: papa pública, a variável string recebe a sequencia "papa pública", entao ele procura pela fraze pela sequencia exata à contida na string. funciona como se "papa pública" fosse uma palavra.O segundo código faz 90% do trabalho, mas me repete os registros, ao efetuar a busca por mais de uma palavra contida no registro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

na hora de faze a busca você vai faze assim:

 

PHP

[*]<?php

[*]$buscar = "Papa publica"//isso eh um exemplo, você puxa a variavel a ser buscada de onde você quizer

[*]$busca = trim($busca)//para cancelar os espacos extras no inicio e fim da string

[*]$strings = explode(" ", $busca)//separando as palavras a serem buscadas

[*]$buscar = ""//nova variavel em branco

[*]

[*]while($row = each($strings)) {

[*] $buscar .= "titulo LIKE '%{$row[1]}%' and "//criando os likes

[*]}

[*]

[*]$buscar = substr($buscar, 0, -5)//remover o ultimo and

[*]

[*]$query = mysql_query("select * from artigos where {$buscar}");

[*]

[*]?>

 

acho q isso resolve seu problema ;)

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.