Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Algo de errado com esta consulta?
Está aparecendo todos os dados sem nenhuma filtragem. Mas quando eu tiro os LIKEs ela funciona ou se eu tiro os BETWEEN e deixo os LIKEs ela funciona. Uma só funciona sem a outra. Por que?
$produto = mysql_query("SELECT idProduto, tipoProduto, imagemProduto, marcaProduto, modeloProduto, conservacaoProduto, anoProduto, kmProduto, corProduto, portasProduto, transmissaoProduto, combustivelProduto, valorProduto, destaqueProduto, visivelProduto, opcionaisProduto, observacoesProduto, 'datacriacaoProduto', 'dataalteracaoProduto', usuariocriacaoProduto, usuarioalteracaoProduto FROM produto WHERE
(tipoProduto LIKE '%".$tipo."%') OR
(marcaProduto LIKE '%".$marca."%') OR
(modeloProduto LIKE '%".$modelo."%') OR
(conservacaoProduto LIKE '%".$conservacao."%') OR
(anoProduto BETWEEN '".$minano."' AND '".$maxano."') OR
(valorProduto BETWEEN '".$minpreco."' AND '".$maxpreco."') OR
(kmProduto BETWEEN '".$minkm."' AND '".$maxkm."')")
Depois dos LIKE's não deveria colocar um AND para depois utilizar o BETWEEN?
Depois de muito pesquisar cheguei na solução abaixo. Acho q transformar as variáveis apenas em POST, tirar as aspas simples dos BETWEENs e colocar o formulario com enctype multipart, ele enfim funcionou. Acho q foi isso:
<?php
if(isset($_POST['acao']) && $_POST['acao'] == 'enviar'){
$tipocarro = $_POST['tipoProdutoCarro'];
if(isset($_POST['tipoProdutoCarro']) && empty($_POST['tipoProdutoMoto']))
{
$tipochecked = "tipoProduto LIKE 'Carro' AND ";
}
else
{
if(isset($_POST['tipoProdutoMoto']) && empty($_POST['tipoProdutoCarro']))
{
$tipochecked = "tipoProduto LIKE 'Moto' AND ";
}
else
{
if(isset($_POST['tipoProdutoCarro']) && isset($_POST['tipoProdutoMoto']))
{
$tipochecked = "tipoProduto LIKE '%%' AND ";
}$tipochecked = "tipoProduto LIKE '%%' AND ";
}
}
}
$conservacao = $_POST['conservacaoProduto'];
if(isset($_POST['conservacaoProdutoNovo']) && empty($_POST['conservacaoProdutoUsado']))$conservacaochecked = "conservacaoProduto LIKE 'Novo' AND ";
}$conservacaochecked = "conservacaoProduto LIKE 'Usado' AND ";
}if(isset($_POST['conservacaoProdutoNovo']) && isset($_POST['conservacaoProdutoUsado']))
{
$conservacaochecked = "conservacaoProduto LIKE '%%' AND ";
}$conservacaochecked = "conservacaoProduto LIKE '%%' AND ";
}
}
}
$marca = $_POST['marcaProduto'];
$modelo = $_POST['modeloProduto'];
$minano = $_POST['MinANO'];
$maxano = $_POST['MaxANO'];
$minpreco = $_POST['MinPRECO'];
$maxpreco = $_POST['MaxPRECO'];
$minkm = $_POST['MinKM'];
$maxkm = $_POST['MaxKM'];
}
$produto = mysql_query("SELECT * FROM produto WHEREor die(mysql_error());
if(@mysql_num_rows == '0'){
echo "Não encontramos resultados no momento.";$idProduto = $res_produto[0];
$tipoProduto = $res_produto[1];
$imagemProduto = $res_produto[2];
$marcaProduto = $res_produto[3];
$modeloProduto = $res_produto[4];
$conservacaoProduto = $res_produto[5];
$anoProduto = $res_produto[6];
$kmProduto = $res_produto[7];
$corProduto = $res_produto[8];
$portasProduto = $res_produto[9];
$transmissaoProduto = $res_produto[10];
$combustivelProduto = $res_produto[11];
$valorProduto = $res_produto[12];
$destaqueProduto = $res_produto[13];
$visivelProduto = $res_produto[14];
$opcionaisProduto = $res_produto[15];
$observacoesProduto = $res_produto[16];
$datacriacaoProduto = $res_produto[17];
$dataalteracaoProduto = $res_produto[18];
$usuariocriacaoProduto = $res_produto[19];
$usuarioalteracaoProduto = $res_produto[20];
?>
Dica , quando usar OR e AND no mesmo where separe por parenteses para o resultado ficar mais claro
Pesquisar posts de motta ou saulobueno em 2016
algo assim
select *
from posts
where ( (user = 'motta' or user = 'saulobueno') and (ano = 2016) )