Problema com resuldados do MySql
29/12/2014
0
if(isset($_GET['envia_pesquisa'])){ $busca = $_GET['pesquisa']; echo " <div id='cem'> <div class='form2'> <form method='get' action='' id='form2'> <input type='text' name='pesquisa' value='".$busca."'/> <input type='submit' name='envia_pesquisa' value='Pesquisar'/> </form> </div> </div> "; $busca = explode(' ', $busca); $quant = count($busca); $id_mostrado = array(""); for($i=0;$i<$quant;$i++){ $pesquisa = $busca[$i]; $sql = mysql_query("SELECT * FROM mr_posts WHERE titulo LIKE '%$pesquisa%' ORDER BY visitas DESC"); $quant_campos = mysql_num_rows($sql); if($quant_campos == 0 ){ echo "Ops... Não encontramos nada a sobre <font color='#000'>$sobre</font> mas você pode fazer uma solicitação de conteúdo<a href='http://www.hosteste.esy.es/contato' title='Solicitar Conteúdo'> aqui</a>."; } else { while($array = mysql_fetch_array($sql)) { $id = $array['id']; $titulo = $array['titulo']; $descricao = $array['descricao_b']; if(empty($descricao)){ $str = strip_tags( $array['conteudo'] ); $len = strlen( $str ); $max = 160; $descricao = substr($str, 0, $max)."..."; } $url = $root."/artigo/".$id."/".strtr($titulo, $trata_url).".html"; if(!array_search($id, $id_mostrado)){ echo " <div id='resultado'> <a href='".$url."'><h1>".$titulo."</h1></a> <p>".$descricao."</p> </div> "; array_push($id_mostrado, "$id"); } } } }
ele ta praticamente perfeito, o problema é que toda vês que ele faz uma busca no banco de dados ele me da um retorno sim ou não, e no caso se eu fizer uma busca.
Se calça nem quadrada não estiver presente no meu BD ele vai exibir o resultado equivalente a pesquisa Moto G e calça quadrada ele mostra a frase que não encontrou :/ tudo e eu só quero que essa frase existe se nenhuma das palavras pesquisadas estiver no meu banco de dados, caso Moto G calça quadrada não estiver presente no banco de dados exibe aviso que não encontrou caso alguma das palavras estiver me da um resultado :D alguma ideia de como fazer isso? :/
Cleyton Caetano
Posts
29/12/2014
Ronaldo Lanhellas
SELECT * FROM mr_posts WHERE titulo LIKE '%$palavra[0]%' OR LIKE '%$palavra[1]%' OR LIKE '%$palavra[2]%' ORDER BY visitas DESC;
Óbvio que vocÊ terá que montar seu SQL em um laço FOR , mostrei acima apenas um exemplo de como deverá ficar.
29/12/2014
Cleyton Caetano
SELECT * FROM mr_posts WHERE titulo LIKE '%$palavra[0]%' OR LIKE '%$palavra[1]%' OR LIKE '%$palavra[2]%' ORDER BY visitas DESC;
Óbvio que vocÊ terá que montar seu SQL em um laço FOR , mostrei acima apenas um exemplo de como deverá ficar.
não to conseguindo montar o SQL, pode me dar uma ajudinha :D
<?php $produto = 'novo seguranca casa festa'; $produto = explode(' ', $produto); $quant = count($produto); $sql1 = "SELECT * FROM mr_posts WHERE titulo LIKE '%$produto[0]%' "; for ($i = 0; $i < $quant; $i++) { $sql2 = "OR LIKE '%$produto[$i]%' "; } $sql3 = "ORDER BY visitas DESC"; $sql = "(".$sql1.$sql2.$sql3.")";
o problema é que o resultado eu eu tenho assim é só o primeiro e o último, como faço pra variável $sql2 pegar todos os valores?
29/12/2014
Ronaldo Lanhellas
SELECT * FROM mr_posts WHERE titulo LIKE '%$palavra[0]%' OR LIKE '%$palavra[1]%' OR LIKE '%$palavra[2]%' ORDER BY visitas DESC;
Óbvio que vocÊ terá que montar seu SQL em um laço FOR , mostrei acima apenas um exemplo de como deverá ficar.
não to conseguindo montar o SQL, pode me dar uma ajudinha :D
<?php $produto = 'novo seguranca casa festa'; $produto = explode(' ', $produto); $quant = count($produto); $sql1 = "SELECT * FROM mr_posts WHERE titulo LIKE '%$produto[0]%' "; for ($i = 0; $i < $quant; $i++) { $sql2 = "OR LIKE '%$produto[$i]%' "; } $sql3 = "ORDER BY visitas DESC"; $sql = "(".$sql1.$sql2.$sql3.")";
o problema é que o resultado eu eu tenho assim é só o primeiro e o último, como faço pra variável $sql2 pegar todos os valores?
Vamos lá .. tente assim
$produto = 'novo seguranca casa festa'; $produto = explode(' ', $produto); $quant = count($produto); $sql1 = "SELECT * FROM mr_posts WHERE titulo "; for ($i = 0; $i < $quant; $i++) { if ($i == 0){ $sql2 += " LIKE '%$produto[$i]%'"; }else{ $sql2 += " OR LIKE '%$produto[$i]%' "; } $sql3 = "ORDER BY visitas DESC"; $sql = "(".$sql1.$sql2.$sql3.")";
}
[/code]
29/12/2014
Cleyton Caetano
SELECT * FROM mr_posts WHERE titulo LIKE '%$palavra[0]%' OR LIKE '%$palavra[1]%' OR LIKE '%$palavra[2]%' ORDER BY visitas DESC;
Óbvio que vocÊ terá que montar seu SQL em um laço FOR , mostrei acima apenas um exemplo de como deverá ficar.
não to conseguindo montar o SQL, pode me dar uma ajudinha :D
<?php $produto = 'novo seguranca casa festa'; $produto = explode(' ', $produto); $quant = count($produto); $sql1 = "SELECT * FROM mr_posts WHERE titulo LIKE '%$produto[0]%' "; for ($i = 0; $i < $quant; $i++) { $sql2 = "OR LIKE '%$produto[$i]%' "; } $sql3 = "ORDER BY visitas DESC"; $sql = "(".$sql1.$sql2.$sql3.")";
o problema é que o resultado eu eu tenho assim é só o primeiro e o último, como faço pra variável $sql2 pegar todos os valores?
Vamos lá .. tente assim
$produto = 'novo seguranca casa festa'; $produto = explode(' ', $produto); $quant = count($produto); $sql1 = "SELECT * FROM mr_posts WHERE titulo "; for ($i = 0; $i < $quant; $i++) { if ($i == 0){ $sql2 += " LIKE '%$produto[$i]%'"; }else{ $sql2 += " OR LIKE '%$produto[$i]%' "; } $sql3 = "ORDER BY visitas DESC"; $sql = "(".$sql1.$sql2.$sql3.")";
}
[/code]
enfim consegui forma o sql!
$produto = 'novo seguranca casa festa'; $produto = explode(' ', $produto); $quant = count($produto); $sql1 = "SELECT * FROM mr_posts WHERE titulo "; for ($i = 0; $i < $quant; $i++) { if ($i == 0){ $sql2 = " LIKE '%$produto[$i]%'"; }else{ $sql2 .= " OR LIKE '%$produto[$i]%' "; } } $sql3 = "ORDER BY visitas DESC"; $sql = "(".$sql1.$sql2.$sql3.")";
fiz algumas alterações, tirei o + e coloquei . por estava mostrando o mesmo resultado da meu código anterior menos a parte do $produto[0], mas agora o meu Sql ta formado :D, vou tentar executar a busca agora!
29/12/2014
Cleyton Caetano
o erro que está presente agora é:
veja meu código atual pra ver como está!
$produto = explode(' ', $produto); $quant = count($produto); $sql1 = "SELECT * FROM produtos WHERE nome_produto"; for ($i = 0; $i < $quant; $i++) { if ($i == 0){ $sql2 = " LIKE '%$produto[$i]%'"; }else{ $sql2 .= " OR LIKE '%$produto[$i]%' "; } } $sql3 = "ORDER BY visitas DESC"; $sql = '"'.$sql1.$sql2.$sql3.'"'; $sql_query = mysql_query($sql); while($array = mysql_fetch_array($sql_query)) { $id = $array['id_produto']; $imagem = $array['foto']; $valor = $array['valor']; $novo = $array['novo']; $nome_produto = utf8_encode($array['nome_produto']); echo " <div class='lista_produtos'> <div class='produto_exibe'> <div id='imagem'> <center> <a href='".$root."/produto.php?id=".$id."' title='".$nome_produto."'><img src='".$imagem."' /></a> </center> </div> <div id='titulo'> <a href='".$root."/produto.php?id=".$id."' title='".$nome_produto."'><h2>".$nome_produto."</h2></a> </div> <div id='valor'> "; if($novo != 1){ echo "<p>Produto Usado</p>"; } else { echo "<p>Produto Novo</p>"; } echo " <h1><span class='cor_preco'>R$".$valor."</span></h1> </div> </div> </div> "; }
já tentei trocar os seguentes códigos.
$sql2 .= " OR LIKE '%$produto[$i]%' "; // POR $sql2 .= " OR nome_produto LIKE '%$produto[$i]%' ";
mas não tive o sucesso esperado...
29/12/2014
Ronaldo Lanhellas
29/12/2014
Cleyton Caetano
o que o var_drumo me retornou foi.
bool(false)
29/12/2014
Ronaldo Lanhellas
o que o var_drumo me retornou foi.
bool(false)
Então seu SQL foi não executado. Antes de enviá-lo use o var_dump() no $sql e poste aqui o SQL montado.
29/12/2014
Ronaldo Lanhellas
o que o var_drumo me retornou foi.
bool(false)
Então seu SQL foi não executado. Antes de enviá-lo use o var_dump() no $sql e poste aqui o SQL montado.
29/12/2014
Cleyton Caetano
$sql = '"'.$sql1.$sql2.$sql3.'"'; // para $sql = $sql1.$sql2.$sql3; // e $sql3 = "ORDER BY visitas DESC"; //por $sql3 = " ORDER BY rand()";
29/12/2014
Ronaldo Lanhellas
29/12/2014
Cleyton Caetano
era justamente isso :D visitas é de outra tabela :D
agora outro probleminha :/ eu quero que ele procure por palavras inteiras, e não uma busca por letras, tipo se alguém procura por MOTO G ele vai entregar os resultados equivalentes mas também vai entregar todas os registros que tiver a letra G no meio, tem como resolver isso?
29/12/2014
Ronaldo Lanhellas
era justamente isso :D visitas é de outra tabela :D
agora outro probleminha :/ eu quero que ele procure por palavras inteiras, e não uma busca por letras, tipo se alguém procura por MOTO G ele vai entregar os resultados equivalentes mas também vai entregar todas os registros que tiver a letra G no meio, tem como resolver isso?
Você pode fazer uma checagem, onde a palavra que tiver menos que 2 caracteres irá juntar-se com a anterior.
29/12/2014
Cleyton Caetano
era justamente isso :D visitas é de outra tabela :D
agora outro probleminha :/ eu quero que ele procure por palavras inteiras, e não uma busca por letras, tipo se alguém procura por MOTO G ele vai entregar os resultados equivalentes mas também vai entregar todas os registros que tiver a letra G no meio, tem como resolver isso?
Você pode fazer uma checagem, onde a palavra que tiver menos que 2 caracteres irá juntar-se com a anterior.
e como faz isso?
29/12/2014
Ronaldo Lanhellas
$produto = explode(' ', $produto); $quant = count($produto); $sql1 = "SELECT * FROM produtos WHERE nome_produto"; for ($i = 0; $i < $quant; $i++) { $palavra_composta = $produto[$i]; if (count($produto[$i+1]) <= 2){ $palavra_composta .= $produto[$i+1]; $i++; if (count($produto[$i+1]) <= 2){ $palavra_composta .= $produto[$i+1]; $i++; } } if (empty($sql2)){ $sql2 = " LIKE '%$palavra_composta%'"; }else{ $sql2 .= " OR LIKE '%$palavra_composta%' "; } $palavra_composta = ""; } $sql3 = "ORDER BY visitas DESC"; $sql = '"'.$sql1.$sql2.$sql3.'"'; $sql_query = mysql_query($sql); while($array = mysql_fetch_array($sql_query)) { $id = $array['id_produto']; $imagem = $array['foto']; $valor = $array['valor']; $novo = $array['novo']; $nome_produto = utf8_encode($array['nome_produto']); echo " <div class='lista_produtos'> <div class='produto_exibe'> <div id='imagem'> <center> <a href='".$root."/produto.php?id=".$id."' title='".$nome_produto."'><img src='".$imagem."' /></a> </center> </div> <div id='titulo'> <a href='".$root."/produto.php?id=".$id."' title='".$nome_produto."'><h2>".$nome_produto."</h2></a> </div> <div id='valor'> "; if($novo != 1){ echo "<p>Produto Usado</p>"; } else { echo "<p>Produto Novo</p>"; } echo " <h1><span class='cor_preco'>R$".$valor."</span></h1> </div> </div> </div> "; }
Clique aqui para fazer login e interagir na Comunidade :)