Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 237
Localização: Florianópolis/SC
Contato:

sistema de busca

13-06-2007 14:53

Olá, estou precisando de um sistema de busca, não quero usar somente o LIKE do php, ou %LIKE% pois ele busca palavras com o termo exato.

preciso de uma busca que procure ate mesmo valores composto, ex.
BUSCA> "quero isto"
ele procure no bd um texo que contenha "quero" e "isto" em qualquer ordem, o LIKE não permite fazer isto.

Sei que tem alguns scripts de busca ai pela web, mas geralmente estão com bugs, ou não conseguimos adaptar ao padrão do site.

Vi um tópico sobre um esquema que verifica a % porcentagem de concidência entre termos. Se tivesse com usar ele em uma busca seria ótimo pois não teria problemas com acentuação.
BUSCA "quero só isto"
ele procura no bd algo que tenha uma boa porcentagem comparando com "quero só isto", então se o texto fosse "quero so isto" (sem acento) seria encontrado.

Tem algo parecido ou alguma dica para criar um script assim?
Seria uma ótima solução para usar em divesos sites!!
0
MIDZ.com.br
http://www.midz.com.br
Soluções Web
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17583
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

sistema de busca

13-06-2007 20:32

Poderia usar um if dentro do while onde retornaria os campos com termos parecidos com o buscado, ex.:

if(strstr($campo, "$termo")==TRUE) { echo $campo."<br>"; }

Ou seja, se for encontrado o termos buscado dentro do campo, mostra.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 237
Localização: Florianópolis/SC
Contato:

sistema de busca

13-06-2007 20:45

eu queria algo que fosse +/- o seguinte:
os termos nao precisam estar seguidos, podem ser aleatorios no texto

que funcionem como o exemplo abaixo
o texto...
"aos vinte dias do mes de novembro"

fosse encontrado qdo buscasse por
"vinte de novembro"

este abaixo não funciona nesta condição

<?php $campo = "aos vinte dias do mes de novembro"; $termo = "vinte de novembro"; if(strstr($campo, "$termo")==TRUE) { echo $campo."<br>"; } ?>

teria algo assim?
0
MIDZ.com.br
http://www.midz.com.br
Soluções Web
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17583
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

sistema de busca

13-06-2007 21:15

Para isso, pode ser fazer um script de acordo com quantas palavras o visitante buscar.
Esse exemplo abaixo funciona até 3 palavras buscadas.

O objetivo desse código é, quando o visitante buscar uma palavra, fazer uma busca direta, quando for duas, fazer um if buscado a primeira palavra ou a segunda, e quando buscar três palavras, buscar uma das três.

Obs.: Para um resultado de melhor qualidade, peça aos visitantes que façam a buscar por termos específicos de acordo com o conteúdo buscado.

<?php $dbhost="localhost"; $dbuser="login"; $dbpasswd="senha"; $dbname="bancodedados"; $conexao = @mysql_connect($dbhost, $dbuser, $dbpasswd) or die ("não foi possível a conexão, verifique os dados."); $db = @mysql_select_db($dbname) or die ("não foi possível o acesso ao banco de dados $dbname."); $valor = 0; // incremento para resultado $Busca = mysql_query("SELECT * FROM suatabela"); $texto = $_GET['valor']; // valor passado pelo link ?valor=... $texto = strtolower($texto); $palavra = explode(" ", $texto); $quantos = sizeof($palavra); switch($quantos) { case 1: while($Busca_while=mysql_fetch_array($Busca)) { $campo = $Busca_while['campodatabela']; $campo_n = $Busca_while['campodatabela']; $campo = strtolower($campo); if(strstr($campo, $palavra[0])==TRUE) { echo $campo_n."<br>"; $valor = $valor+1; } } break; case 2: while($Busca_while=mysql_fetch_array($Busca)) { $campo = $Busca_while['campodatabela']; $campo_n = $Busca_while['campodatabela']; $campo = strtolower($campo); if(strstr($campo, $palavra[0])==TRUE OR strstr($campo, $palavra[1])==TRUE) { echo $campo_n."<br>"; $valor = $valor+1; } } break; case 3: while($Busca_while=mysql_fetch_array($Busca)) { $campo = $Busca_while['campodatabela']; $campo_n = $Busca_while['campodatabela']; $campo = strtolower($campo); if(strstr($campo, $palavra[0])==TRUE OR strstr($campo, $palavra[1])==TRUE OR strstr($campo, $palavra[2])==TRUE) { echo $campo_n."<br>"; $valor = $valor+1; } } break; } echo "encontrado $valor resultados"; ?> <?php mysql_close($conexao); ?>

0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 237
Localização: Florianópolis/SC
Contato:

sistema de busca

14-06-2007 18:05

funcinou, achou os resultados.

porém acho que me expressei mal... eu quero que ele ache o texto que contenha todas palavras usadas na busca.

no momento quanto mais refinada a busca, mais resultados ele acha,

acho que deveria ter uma condição que fosse o seguinte,
so retornaria o texto se todas as palavras usadas na busca fossem encontradas nele.

assim qtos mais refinado a busca melhor seriam os resultados.

ps. estamos quase igual ao pequeno google.
0
MIDZ.com.br
http://www.midz.com.br
Soluções Web
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17583
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

sistema de busca

14-06-2007 19:58

No caso de melhor resultado, só passando essa informação para os visitantes, porque eles é que vão colocar o conteúdo.

Já para o Google, um dia agente chega lá uhuahuhauhuahuhau ¨blush¨
0
A melhor hospedagem para o seu site HostGator!

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado