Ir para conteúdo

POWERED BY:

Arquivado

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

Will Fernando

[Resolvido] busca de produtos relacionados

Recommended Posts

opa galera ... assim eu to fazendo um sisteminha q busca os produtos relacionados .. tipo o cara ta olhando um computador ... ae em baixo vai listar um link pra ver um mouse , um monitor .. etc... beleza.. criei no banco um campo produtos relacionados( LongText ) no qual a pessoa digita la por exemplo "mouse monitor teclado" ae ele lista os que tem essas palavras usando um like ... problema .. se bota direto pra pesquisa pelo campo ele interpleta que tenha q te essas 3 palavras na mesma .. entao tava pensado em da um explode no campo pra separa as 3 palavras.. so que dai acho q nao da pra pesquisa tendo como parametro uma array.. e nao tem um numero fixo de produtos relacionados pra min faze tipo .. $linha[0] or $linha[1] e tal... alquem tem uma opiniao sobre como fazer isso ??

 

valwww

Compartilhar este post


Link para o post
Compartilhar em outros sites

$palavra = explode(' ', $palavras);

foreach($palavra as $produto_relacionado)
{
	... SELECT LIKE $produto_relacionado....
}

Isso resolve ?

 

Exemplo:

 

$palavras = 'computador monitor mouse';

 

$palavra ficaria (computador, monitor, mouse)

Compartilhar este post


Link para o post
Compartilhar em outros sites

melhor seria separa os produtos com vírgula ao invés de espaço, por que assim poderia cadastrar produtos com mais de uma palavra, tipo: "bola de futebol, campo de futebol de botão, etc..."

 

Daí, no meu código, troca a linha do explode, ao invés de espaço, coloca vírgula:

$palavra = explode(',', $palavras);

Compartilhar este post


Link para o post
Compartilhar em outros sites

tentei aki ..

 

<?php 
$rel = explode(' ',$row_rsExibirProduto['prod_relacionados']);
$sql_rel = "SELECT * FROM produtos WHERE prod_nome LIKE '%$rel%' LIMIT 0,10";
$query_rel = mysql_query($sql_rel, $ConnWNL);
$linha_rel = mysql_fetch_array($query_rel);
/*echo "<pre>";
print_r($rel);
echo "</pre>";
exit;*/
foreach($rel as $linha_rel)
{
 echo "<p align=\"left\">";
 echo "<table width=\"100%\"  border=\"1\">";
 echo "<tr>";
 echo "<td><a href=\"exibe_produtos.php?id_produto=".$linha_rel['prod_id']."\">".$linha_rel['prod_nome']."</a></td>";
 echo "</tr>";
 echo "</table>";
 echo "</p>";
}			
?>

a array que tenho na gravacao que to usando de teste tem como valor monitor[0] e mouse[1] .... ele deveria listar entao os produtos q tivesem no nome monitor e mouse... so q ele tah listan do a letra M soh ..

 

M

M

 

*com link direicionando pra pagina com id_produto=M .. alquem sabe por que ??

 

valww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Will, você terá que fazer assim...

 

 

$query = 'sua query';

$palavra = explode(' ', $palavras);
foreach($palavra as $produto_relacionado)
{
	$query .="adiciona LIKES a sua query com o $produto_relacionado;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

seguindo como o diego indico...

<?php 
$rel = explode(' ',$row_rsExibirProduto['prod_relacionados']);
/*echo "<pre>";
print_r($rel);
echo "</pre>";
exit;*/
$sql_rel = "SELECT * FROM produtos WHERE prod_nome ";
//$a = 0;
foreach($rel as $palavra)
{
$sql_rel .= "LIKE '%$palavra%' LIMIT 0,3 ";
$query_rel = mysql_query($sql_rel, $ConnWNL);
$linha_rel = mysql_fetch_assoc($query_rel);
//$b = ($a+1);
//echo $b;
			echo "<p align=\"left\">";
			echo "<table width=\"100%\"  border=\"1\">";
			echo "<tr>";
			echo "<td><a href=\"exibe_produtos.php?id_produto=".$linha_rel['prod_id']."\">".$linha_rel['prod_nome']."</a></td>";
			echo "</tr>";
			echo "</table>";
			echo "</p>";
		}
?>

beleza ta mostrando o produto certinho .. soh q ..so ta mostrando o primeiro da primeira palavra .. depois da erro de supplied argument .. =[ .. primeiro eu pensei que talvez ele estive pegando o mesmo valor da variavel e adicionando o like dnovo.. asim ficaria fora da sintaxe e nao executaria o fetch_assoc dando esse erro.. so que eu fiz um teste com uma otra variavel q alias ta comentada ali e mostro que ta fazendo certinho ..

 

entao alquem tem uma opiniao sobre ??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tu vai ter que fazer o seguinte....

 

$query = 'SELECT ... FROM ... WHERE ... AND (

$palavra = explode(' ', $palavras);
foreach($palavra as $produto_relacionado)
{
	$query .="adiciona LIKES a sua query com o $produto_relacionado;
}

$query .= ') ORDER BY ....';

No final, sua query vai ter que ficar assim...

SELECT * FROM produtos WHERE ... AND (prod_nome LIKE 'computador' OR prod_nome LIKE 'mouse'  OR prod_nome LIKE 'tv'

Entendeu ?

 

Como são vários likes, e você quer exibir qualquer um, tem que ser separados por OR.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Troque seu código, por esse... deve resolver...

 

<?php 

$rel = explode(' ',$row_rsExibirProduto['prod_relacionados']);

$sql_rel = "SELECT * FROM produtos WHERE (";

foreach($rel as $palavra)
{
	 $sql_rel .= "prod_nome LIKE '%$palavra%' OR ";
}

$sql_rel .= '..';
$sql_rel = str_replace(' OR ..', ')', $sql_rel); // Tira a última palavra OR e coloca )

$sql_rel .= ' LIMIT 0,3';

$query_rel = mysql_query($sql_rel, $ConnWNL);

echo "<p align=\"left\">";
echo "<table width=\"100%\"  border=\"1\">";

while($linha_rel = mysql_fetch_assoc($query_rel))
{
	echo "<tr>";
	echo "<td><a href=\"exibe_produtos.php?id_produto=".$linha_rel['prod_id']."\">".$linha_rel['prod_nome']."</a></td>";
	echo "</tr>";
}

echo "</table>";
echo "</p>";

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

uhum .. Ok tah funfando certin agora...

 

pra qm quise da uma conferida no script final

 

<?php
$rel = explode(' ',$row_rsExibirProduto['prod_relacionados']);
$sql_rel = "SELECT * FROM produtos WHERE (";
foreach($rel as $palavra)
	{
		$sql_rel .= "prod_nome LIKE '%$palavra%' OR ";
	}

$sql_rel .= '..';
$sql_rel = str_replace(' OR ..', ')', $sql_rel); // Tira a última palavra OR e coloca )
$sql_rel .= ' LIMIT 0,10';
$query_rel = mysql_query($sql_rel, $ConnWNL);
//$b = ($a+1);
//echo $b;
while($linha_rel = mysql_fetch_assoc($query_rel)):
	echo "<p align=\"left\">";
	echo "<table width=\"100%\"  border=\"1\">";
	echo "<tr>";
	echo "<td><a href=\"exibe_produtos.php?id_produto=".$linha_rel['prod_id']."\">".$linha_rel['prod_nome']."</a></td>";
	echo "</tr>";
	echo "</table>";
	echo "</p>";
endwhile;
?>

valww diego

Compartilhar este post


Link para o post
Compartilhar em outros sites

Will.. tu começa uma tabela para exibir cada produto relacionado ??

Por que não usa apenas o tr dentro do while ?

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.