Why is my WHERE statement in Mysql not working?

Asked

Viewed 44 times

0

I have the SELECT below, and in the WHERE clauses the amount of credit would only be shown if >= 2, but even putting the condition, shows me everything.

(fornecedor_credito.qtd_credito >= '2') AND (cadastra_oferta.qtd_estoque >= '2') AND 

What am I doing wrong? In the table the field is decimal.

    $sql = "SELECT
        (select avg(avaliacao.avaliacao_geral) from avaliacao where avaliacao.cod_fornecedor = fornecedores.cod_fornecedor ) as media_avaliacao,
   fornecedores.cod_fornecedor,
   fornecedores.fantasia,
   fornecedores.CPF,
   fornecedores.identidade,
   fornecedores.email,
   fornecedores.cep,
   fornecedores.logradourro,
   fornecedores.complemento,
   fornecedores.cidade,
   fornecedores.estado,
   fornecedores.responsavel_contato,
   fornecedores.telefone_empresa,
   fornecedores.telefone_responsavel,
   fornecedores.celular,
   fornecedores.data_hora_cadastro,
   fornecedores.bairro,
   fornecedores.numero,
   fornecedores.latitude,
   fornecedores.longitude,
   cadastra_oferta.cod_oferta,
   cadastra_oferta.cod_fornecedor,
   cadastra_oferta.cod_categoria_com,
   cadastra_oferta.titulo_promocao,
   cadastra_oferta.descricao,
   cadastra_oferta.foto,
   cadastra_oferta.valor_sem_desconto,
   cadastra_oferta.valor_com_desconto,
   cadastra_oferta.desconto,
   cadastra_oferta.validade_oferta,
   cadastra_oferta.igredientes,
   cadastra_oferta.qtd_estoque,
   categoria_comida.cod_categoria_com,
   categoria_comida.nome,
   categoria_comida.data_cadastro,
   fornecedor_credito.cod_fornecedor_codigo,
   fornecedor_credito.cod_fornecedor,
   fornecedor_credito.qtd_credito,
   fornecedor_configura_frete.cod_configura_frete,
   fornecedor_configura_frete.cod_fornecedor,
   fornecedor_configura_frete.tem_delivery,
   fornecedor_configura_frete.custo_padrao,
   fornecedor_configura_frete.frete_gratis,
   fornecedor_configura_frete.valor_minimo_frete_gratis,
   fornecedor_configura_frete.tipos_pagamentos,
   fornecedor_configura_frete.prazo_entrega_min,
   fornecedor_configura_frete.prazo_entrega_max,
   fornecedor_configura_frete.agenda_comida,
   fornecedor_configura_frete.raio_atuacao,
   fornecedor_configura_frete.dayw_one,
   fornecedor_configura_frete.dayw_two,
   fornecedor_configura_frete.dayw_three,
   fornecedor_configura_frete.dayw_four,
   fornecedor_configura_frete.dayw_five,
   fornecedor_configura_frete.dayw_six,
   fornecedor_configura_frete.dayw_seven,
   fornecedor_configura_frete.hour_ini_one,
   fornecedor_configura_frete.hour_end_one,
   fornecedor_configura_frete.hour_ini_two,
   fornecedor_configura_frete.hour_end_two,
   fornecedor_configura_frete.hour_ini_three,
   fornecedor_configura_frete.hour_end_three,
   fornecedor_configura_frete.hour_ini_four,
   fornecedor_configura_frete.hour_end_four,
   fornecedor_configura_frete.hour_ini_five,
   fornecedor_configura_frete.hour_end_five,
   fornecedor_configura_frete.hour_ini_six,
   fornecedor_configura_frete.hour_end_six,
   fornecedor_configura_frete.hour_ini_seven,
   fornecedor_configura_frete.hour_end_seven,
   fornecedor_visual.cod_fornecedor_visual,
   fornecedor_visual.cod_fornecedor,
   fornecedor_visual.descricao_empresa,
   fornecedor_visual.facebook,
   fornecedor_visual.localizacao_mapa,
   fornecedor_visual.logomarca,
   fornecedor_visual.data_cadastro,
   fornecedor_visual.latitude,
   fornecedor_visual.longitude,
   (6371 * acos(
        cos( radians('$latitude') )
        * cos( radians( fornecedores.latitude ) )
        * cos( radians( fornecedores.longitude ) - radians('$longitude') )
        + sin( radians('$latitude') )
        * sin( radians( fornecedores.latitude ) ) 
        )
    ) AS distancia,
    (6371 * acos(
        cos( radians(fornecedores.latitude) )
        * cos( radians( '$latitude' ) )
        * cos( radians( '$longitude' ) - radians(fornecedores.longitude) )
        + sin( radians(fornecedores.latitude) )
        * sin( radians( '$latitude' ) ) 
        )
    ) AS distancia_fornecedor
FROM   
   fornecedores INNER JOIN cadastra_oferta ON fornecedores.cod_fornecedor = cadastra_oferta.cod_fornecedor
   INNER JOIN categoria_comida ON cadastra_oferta.cod_categoria_com = categoria_comida.cod_categoria_com
   INNER JOIN fornecedor_credito ON fornecedores.cod_fornecedor = fornecedor_credito.cod_fornecedor
   INNER JOIN fornecedor_configura_frete ON fornecedores.cod_fornecedor = fornecedor_configura_frete.cod_fornecedor
   INNER JOIN fornecedor_visual ON fornecedores.cod_fornecedor = fornecedor_visual.cod_fornecedor     
WHERE 
   (fornecedor_credito.qtd_credito >= '2') AND (cadastra_oferta.qtd_estoque >= '2') AND (cadastra_oferta.validade_oferta >= NOW()) AND (cadastra_oferta.validade_oferta >= CURDATE()) AND (fornecedores.gcm_key <> '') AND (cadastra_oferta.titulo_promocao LIKE '%$busca%') OR (cadastra_oferta.descricao LIKE '%$busca%') 
HAVING distancia <= '$raio' AND distancia_fornecedor <= fornecedor_configura_frete.raio_atuacao
ORDER BY
   cadastra_oferta.titulo_promocao ASC
LIMIT $limit
OFFSET $offset";  

1 answer

5


The problem is in the OR operator, which kills all previous AND, you must specify when it will be processed using parentheses:

(fornecedor_credito.qtd_credito >= '2') AND
(cadastra_oferta.qtd_estoque >= '2') AND 
(cadastra_oferta.validade_oferta >= NOW()) AND 
(cadastra_oferta.validade_oferta >= CURDATE()) AND 
(fornecedores.gcm_key <> '') AND 
( 
  (cadastra_oferta.titulo_promocao LIKE '%$busca%') OR 
  (cadastra_oferta.descricao LIKE '%$busca%') 
)
  • 1

    It worked, perfect! Thank you so much @Rovann

Browser other questions tagged

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