Ir para conteúdo

POWERED BY:

Arquivado

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

mbpp

Query não funciona

Recommended Posts

Oi tudo bem, algúem sabe porque minha query não funciona?

não sei qual o problema, deixo abaixo a minha query

SELECT * FROM produtos WHERE fk_categoria = '$categoria' AND (preco BETWEEN 0 AND '$valor')

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual o erro que retorna?

 

 

fiz um teste aqui alterando os valores e funcionou.

 

Passo a passo,

  1. A tabela esta correta?
  2. As colunas são essas?
  3. Você esta alterando as variáveis?
  4. valores numéricos não precisam de aspas (caso do preco)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está passando a categoria certa e a valor máximo certo?

 

Exemplo: ai você está pesquisando por todos os produtos que pertencem a categoria x e custam entre 0 e y

 

Oi Jackson, basicamente o que pretendo é que a variabel valor é um valor concreto, nesse caso poderá ser 20, 50, ou 100, o que pretende é buscar registos onde o preço é até 20 ou 50 ou 100.

Compartilhar este post


Link para o post
Compartilhar em outros sites

na sua consulta atual ele ta buscando todos os produtos que tem preço entre 0 e 20, 0 e 50 ou 0 e 100, de acordo com o que você passar como valor

 

se quiser pegar todos os produtos com preco = 20 ou 50 ou 100 você pode usar

SELECT * FROM produtos WHERE fk_categoria = '$categoria' AND preco IN (20,50,100)

ou ainda

SELECT * FROM produtos WHERE fk_categoria = '$categoria' AND (preco = 20 OR preco = 50 or preco = 100)

É isso que você gostaria? ou é a faixa de preço mesmo que vc quer?

Compartilhar este post


Link para o post
Compartilhar em outros sites

na sua consulta atual ele ta buscando todos os produtos que tem preço entre 0 e 20, 0 e 50 ou 0 e 100, de acordo com o que você passar como valor

 

se quiser pegar todos os produtos com preco = 20 ou 50 ou 100 você pode usar

SELECT * FROM produtos WHERE fk_categoria = '$categoria' AND preco IN (20,50,100)

ou ainda

SELECT * FROM produtos WHERE fk_categoria = '$categoria' AND (preco = 20 OR preco = 50 or preco = 100)

É isso que você gostaria? ou é a faixa de preço mesmo que você quer?

Eu não quero o preço valor igual (=), no meu caso quero = ou menor que esses valores (20,50 e 100), imagine que é uma busca, onde tenho muitos produtos, e quero buscar todos os produtos que tenham o preço até 20, 50 ou 100.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E o que a primeira consulta que você colocou aqui está trazendo que não deveria?

 

ela está certa.

 

e a categoria está certa?

 

seu campo preço é do tipo float ou inteiro?

O campo preço é tipo varchar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Neste caso vc deveria utilizar aspas no 0 (zero) tbm, já q é texto.

 

Mas o certo seria que o campo preco fosse do tipo Float.

 

 

Quais são os valores que a consulta está trazendo que não deveriam?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Neste caso você deveria utilizar aspas no 0 (zero) tbm, já q é texto.

 

Mas o certo seria que o campo preco fosse do tipo Float.

 

 

Quais são os valores que a consulta está trazendo que não deveriam?

 

Ok, bem, ele funciona bem se usar a query fazendo a condicional sem o fk_categoria, o problema é quadno acrecento mais uma condição. o resultado que ele traz é em vez de trazer registos entre 0 a 50 ou 100 ele me traz todos que são mais altos ou baixo, é como se ele trouxesse todos os registos

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

o problema é quadno acrecento mais uma condição. o resultado que ele traz é em vez de trazer registos entre 0 a 50 ou 100 ele me traz todos que são mais altos ou baixo, é como se ele trouxesse todos os registos

 

Qual a condição que vc acrescentou?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Peço desculpa pela ausencia, mas tive fora, bem voltando atrás, o erro é bem estranho, no mysql tentei fazer a mesma query e funciona perfeitamente trazendo os registos correctos.

 

SELECT * FROM produtos WHERE fk_formato = '1' AND fk_categoria = '1' AND (preco BETWEEN 0 AND '50.00')

 

Mas quando faço a query a partir do php me trás errado, bem estranho... Não entendo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resultado é SELECT * FROM produtos WHERE fk_formato = '1' AND fk_categoria = '1' AND ativo = '1'

 

Estranho, o parametro "valor" deveria passar, não entendi agora...estranho


Já sei o que acontece, mas acho estranho, o que acontece é que ele basicamente nos meus if else condicionais ele foi pegar na minha confisão que já continha por exemplo categoria como valor e usava ela, mas na realidade não está certo, o que pretendo é o sistema verifique se nessas condicionais todas existem os GETS que foram pedidos e depois seleciona o correcto, mas pelos vistos ele escolhe logo o primerio que já tiver nele:

 

abaixo deixo um exmeplo

if (isset($_REQUEST['pesquisar'])) {
					
					//$categoria = $_GET['categori'];

					
					if (isset($_GET['pesquisa-livre'])){
					$pesquisalivre = $_GET['pesquisa-livre'];
					
					$sql= "SELECT * FROM produtos WHERE nome_produto LIKE '%$pesquisalivre%'  AND ativo = '1'";
					}
					elseif($_GET['pesquisa-livre'] && $_GET['formato']){
					$pesquisalivre = $_GET['pesquisa-livre'];
					$formato = $_GET['formato'];	
					
					$sql= "SELECT * FROM produtos WHERE nome_produto LIKE '%$pesquisalivre%' AND fk_formato = '$formato' AND ativo = '1'";	
					}
					elseif($_GET['pesquisa-livre'] && $_GET['categoria']){
					$pesquisalivre = $_GET['pesquisa-livre'];
					$categoria = $_GET['categoria'];	
					
					$sql= "SELECT * FROM produtos WHERE nome_produto LIKE '%$pesquisalivre%' AND fk_categoria = '$categoria' AND ativo = '1'";	
					}
					elseif($_GET['pesquisa-livre'] && $_GET['categoria'] && $_GET['formato']){
					$pesquisalivre = $_GET['pesquisa-livre'];
					$categoria = $_GET['categoria'];	
					$formato = $_GET['formato'];
					
					$sql= "SELECT * FROM produtos WHERE nome_produto LIKE '%$pesquisalivre%' AND fk_categoria = '$categoria' AND fk_formato = '$formato' AND ativo = '1'";	
					}
					elseif($_GET['formato'] && $_GET['categoria']){
					$formato = $_GET['formato'];
					$categoria = $_GET['categoria'];	
					
					$sql= "SELECT * FROM produtos WHERE fk_formato = '$formato' AND fk_categoria = '$categoria' AND ativo = '1'";	
					}
					elseif($_GET['formato']){
					$formato = $_GET['formato'];	
					
					$sql= "SELECT * FROM produtos WHERE fk_formato = '$formato' AND ativo = '1'";	
					}
					elseif($_GET['categoria']){
					$categoria = $_GET['categoria'];
					
					$sql= "SELECT * FROM produtos WHERE fk_categoria = '$categoria' AND ativo = '1'";	
					}

					elseif($_GET['valor']){
					$valor = $_GET['valor'];
					
					//WHERE Price BETWEEN 10 AND 20;
					$sql= "SELECT * FROM produtos WHERE preco BETWEEN 0 AND '$valor'";	
					}

					elseif($_GET['valor'] && $_GET['categoria']){
					$valor = $_GET['valor'];
					$categoria = $_GET['categoria'];
					//WHERE Price BETWEEN 10 AND 20;
					$sql= "SELECT * FROM produtos WHERE fk_categoria = '$categoria' AND (preco BETWEEN 0 AND '$valor')";	
					}
					elseif($_GET['valor'] && $_GET['formato']){
					$valor = $_GET['valor'];
					$formato = $_GET['formato'];
					//WHERE Price BETWEEN 10 AND 20;
					//$sql= "SELECT * FROM produtos WHERE preco BETWEEN 0 AND '$valor' AND fk_formato = '$formato'";	
					$sql= "SELECT * FROM produtos WHERE fk_formato = '$formato' AND (preco BETWEEN '0' AND '$valor')";	
					}
					elseif($_GET['valor'] && $_GET['formato'] && $_GET['categoria']){
					$valor = $_GET['valor'];
					$formato = $_GET['formato'];
					$categoria = $_GET['categoria'];
					//WHERE Price BETWEEN 10 AND 20;
					//SELECT * FROM produtos WHERE fk_formato = '1' AND fk_categoria = '1' AND (preco BETWEEN 0 AND '50.00')
					$sql= "SELECT * FROM produtos WHERE fk_formato = `$formato` AND fk_categoria = `$categoria` AND preco <=`$valor`)";	
					//echo "Resultado é ".$sql;
					
					
					}

					else{
						
						$sql= "SELECT * FROM produtos WHERE  ativo = '1'";	
						}

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.