Do not show product idle when searching for products

0

I have a code snippet that searches my DB for the term, until everything is correct, but I have products that are inactive and should not be caught and are appearing, the code is like this, I should be wrong in the query. p>

    $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);
    
asked by anonymous 11.03.2015 / 19:58

2 answers

3

I believe you control inactive products by products.status. In your query it only refers to the last OR. So if one of the previous ORs gives positive it returns the product. You have to rewrite 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);

Adding the () in the WHERE before the AND, it will test if some LIKE matches and if it gives positive it will test if the status is = 1.

    
11.03.2015 / 20:03
-2

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

    
11.03.2015 / 20:02