Do not show inactive product in search of products

Asked

Viewed 54 times

0

I have a code snippet that does a search to my BD by the term, until everything correct, but I have products that are inactive and should not be caught and are appearing, the code is like this, I must be missing in the query.

    $query_rsBuscaFiltro = "SELECT marca.descricao AS marca, 
                         produtos.id_produto, 
                         produtos.id_departamento,
                         produtos.id_subdepartamento,
                         produtos.id_marca, 
                         produtos.descricao AS prodDesc, 
                         produtos.lancamento,
                         produtos.codigo_msb,
                         produtos.status
                    FROM produtos INNER JOIN marca ON (produtos.id_marca = marca.id_marca) 
                   WHERE (produtos.descricao LIKE '%".$pesquisa."%')  OR 
                         (produtos.resumo LIKE '%".$pesquisa."%')     OR 
                         (produtos.codigo_msb LIKE '%".$pesquisa."%') OR 
                         (produtos.detalhes LIKE '%".$pesquisa."%')   OR 
                         (marca.descricao LIKE '%".$pesquisa."%') AND
                         produtos.status = 1 "; 
                         echo $query_rsBusca;
$rsBuscaFiltro = mysql_query($query_rsBuscaFiltro, $conexao) or die(mysql_error());
$row_rsBuscaFiltro = mysql_fetch_assoc($rsBuscaFiltro);
$totalRows_rsBuscaFiltro = mysql_num_rows($rsBuscaFiltro);
  • What says that (no) is inactive? The status was 1?

  • 1

    You could try something like? WHERE (produtos.descricao LIKE '%".$pesquisa."%' OR produtos.resumo LIKE '%".$pesquisa."%' OR produtos.codigo_msb LIKE '%".$pesquisa."%' OR 
produtos.detalhes LIKE '%".$pesquisa."%' OR marca.descricao LIKE '%".$pesquisa."%') AND produtos.status = 1 ";

  • @Rafaelwithoeft I also think the problem is precedence.

  • @bfavaretto I believe this is it... just waiting for it to test now :)

  • Hello @Rafaelwithoeft and bfavaretto I’m testing, thanks for the tips.

  • Hello @bfavaretto, that’s even if the product is as 1 is active.

Show 1 more comment

2 answers

3


I believe you control the inactive products by the products.status. In your query it only refers to the last OR. So if one of the previous Ors is positive it returns the product. You have to rewrite it like this:

$query_rsBuscaFiltro = "SELECT marca.descricao AS marca, 
                         produtos.id_produto, 
                         produtos.id_departamento,
                         produtos.id_subdepartamento,
                         produtos.id_marca, 
                         produtos.descricao AS prodDesc, 
                         produtos.lancamento,
                         produtos.codigo_msb,
                         produtos.status
                    FROM produtos INNER JOIN marca ON (produtos.id_marca = marca.id_marca) 
                   WHERE ((produtos.descricao LIKE '%".$pesquisa."%')  OR 
                         (produtos.resumo LIKE '%".$pesquisa."%')     OR 
                         (produtos.codigo_msb LIKE '%".$pesquisa."%') OR 
                         (produtos.detalhes LIKE '%".$pesquisa."%')   OR 
                         (marca.descricao LIKE '%".$pesquisa."%')) AND
                         produtos.status = 1 "; 
                         echo $query_rsBusca;
$rsBuscaFiltro = mysql_query($query_rsBuscaFiltro, $conexao) or die(mysql_error());
$row_rsBuscaFiltro = mysql_fetch_assoc($rsBuscaFiltro);
$totalRows_rsBuscaFiltro = mysql_num_rows($rsBuscaFiltro);

By adding the () in the WHERE before the AND, it will test if any LIKE matches and if positive it will test if the status is = 1.

  • Hello @Ricardo Brgweb, thank you so much for the excellent tip, I’m testing.

  • I missed it all the time...rs. Good that helped!

  • Hello @Ricardo Brgweb, helped me a lot with this tip, thank you.

-2

Change the last line of the query to: produtos.status = 0 ";

  • 4

    How do you know what the status of his database means?

Browser other questions tagged

You are not signed in. Login or sign up in order to post.