Para feras: Resultados de uma busca

Enviada por Roberto Lemos 
Roberto Lemos
Para feras: Resultados de uma busca
29 de October de 2003 às 08:47PM
Olá... estou fazendo um sistema de busca para o meu site e estou emperrado por causa do sql pois tenho conhecimentos básicos apenas nessa linguagem


vamos supor que eu tenha em meu index um formulário que chame através de post uma busca onde as palavras cadastradas serão enviadas através da variável $busca


tenho a seguinte programação então:


<?php

$palavra=split (" ", $busca, 5);
$n=0;
if (($palavra[$n] <> "") && (strlen($palavra[$n]) > 2)) {
$pquery = "$pquery descricao like '%$palavra[$n]%' or titulo like '%$palavra[$n]%' or palavras_chave like '%$palavra[$n]%'";
$or="sim";
}
$n++;
if (($palavra[$n] <> "") && (strlen($palavra[$n]) > 2)) {
if ($or=sim) { $pquery = "$pquery or "; }
$pquery = "$pquery descricao like '%$palavra[$n]%' or titulo like '%$palavra[$n]%' or palavras_chave like '%$palavra[$n]%'";
$or="sim";
}
$n++;
if (($palavra[$n] <> "") && (strlen($palavra[$n]) > 2)) {
if ($or=sim) { $pquery = "$pquery or "; }
$pquery = "$pquery descricao like '%$palavra[$n]%' or titulo like '%$palavra[$n]%' or palavras_chave like '%$palavra[$n]%'";
$or="sim";
}
$n++;
if (($palavra[$n] <> "") && (strlen($palavra[$n]) > 2)) {
if ($or=sim) { $pquery = "$pquery or "; }
$pquery = "$pquery descricao like '%$palavra[$n]%' or titulo like '%$palavra[$n]%' or palavras_chave like '%$palavra[$n]%'";
$or="sim";
}
$n++;
if (($palavra[$n] <> "") && (strlen($palavra[$n]) > 2)) {
if ($or=sim) { $pquery = "$pquery or "; }
$pquery = "$pquery descricao like '%$palavra[$n]%' or titulo like '%$palavra[$n]%' or palavras_chave like '%$palavra[$n]%'";
$or="sim";
}
$query = "select id from busca_links where $pquery order by nivel desc";
//echo "$query";

//$query="select id from busca_links where descricao like '%$busca%' or titulo like '%$busca%' or palavras_chave like '%$busca%' order by nivel desc";
$result=query_db($query);
$resultados=mysql_num_rows($result);
$paginas=round($resultados/100, 1);

?>

isso ae transforma a string $busca em uma matriz $palavra, daonde irei fazer a busca variados nos campos dessa matriz...

atualmente o programa roda normalmente e pode ser visto em www.buscabelem.com.br mas não está 100% pois se vc busca por "canal" por exemplo ele retornará 300 resultados, se vc busca por "playstation" por exemplo ele retornará 200 resultados e se vc buscar por "canal playstation" ele retornará os resultados do primeiro mesclados aos resultados do segundo, sendo assim, o que deveria ser uma busca mais específica e com menos resultados, acaba retornando um numero de resultados maiores que das individuais pois só estou utilizando o valor "or" para realizar a query no banco de dados

se alguém já passou por semelhante problema, por favor me dê um help ae ok? pois só está faltando isso para a busca ficar 100%
André de Castro Zorzo
Re: Resultados de uma busca
29 de October de 2003 às 09:00PM
você está usando OR em vez de AND...
Roberto Lemos
Re: Resultados de uma busca
29 de October de 2003 às 09:35PM
vc não entendeu o caso aqui André...

se eu utilizar and cada palavra terá que aparecer no titulo na descrição e nas palavras chaves

o que eu quero é que...

palavra 1 apareça em um desses 3 campos (ou titulo ou descricao ou palavra_chave)

e...

palavra 2 apareça em um desses 3 campos (ou titulo ou descricao ou palavra_chave)

e...

palavra 2 apareça em um desses 3 campos (ou titulo ou descricao ou palavra_chave)

e assim sucessivamente

achei que inner join right join ou qualquer coisa dessas pudesse me ajudar, mas pelo que percebi na documentação do mysql isso serve para comparação entre tabelas distintas (aquelas querys que damos em várias tabelas ao mesmo tempo fazendo comparação entre os resultados obtidos das mesmas)

espero que agora você tenha entendido o problema
Rebelo
Re: Resultados de uma busca
30 de October de 2003 às 12:32AM
Voce tem que colocar tudo num select só...

ex:

Select * from tabela where titulo like '%lala%' or titulo like '%lele%'

saka?

faz tipo isso:

$palavras = explode(" ",$busca);
$count = 0;
while ($count < count($palavras)) {
if $string) $string .= "or titulo like '%$palavra[$count]%' ";
else $string = "titulo like '%$palavra[$count]%' ";
$count++
}


e coloca esse $string no where do select...
André de Castro Zorzo
Re: Resultados de uma busca
30 de October de 2003 às 11:56AM
eu entendi sim cara! mas tipo, teria que ser algo assim:

select campos_* from tabela WHERE
(campo_1 = 'palavra1' OR campo_2 = 'palavra1' OR campo_3 = 'palavra1') AND
(campo_1 = 'palavra2' OR campo_2 = 'palavra2' OR campo_3 = 'palavra2') AND
(campo_1 = 'palavra3' OR campo_2 = 'palavra3' OR campo_3 = 'palavra3')

saca?
Re: Resultados de uma busca
30 de October de 2003 às 01:39PM
O que o andré esta falando é que usando o OR, você terá mais resultados e não menos resultados.

Veja bem, no seu exemplo mesmo você busca por X você encontra 100 respostas. Se você procura por Y, você encontra outros 50. Se você procurar por X Y (duas palavras), usando seu declarador OR você achará o que contém X, Y e XY, ou seja, pelo menos 100 resultados.

Fui claro?
Roberto Lemos
Re: Resultados de uma busca
30 de October de 2003 às 04:23PM
Valeu André :))))

Benditos os seus parêteses hahahaha

Ficou show a busca agora :P

Muito obrigado a todos que contribuiram com suas respostas... Não sei o que seria de mim sem esse fórum da phpbrasil.com
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.