Operadores OR

SQL

MySQL

03/04/2017

Estou criando essa consulta, mas ele está ignorando a parte da data, é como se não estivesse na consulta. Quando eu retiro os operadores OR, retorna certo a consulta. Sabem me dizer o porque?

SELECT * FROM guarnicao WHERE data_entrada between '$datainicial' and '$datafinal' and guarda1='$guarda' OR guarda2='$guarda' OR guarda3='$guarda' OR guarda4='$guarda' OR guarda5='$guarda' order by data_entrada desc
Jonas

Jonas

Curtidas 0

Melhor post

Aline Bianchini

Aline Bianchini

03/04/2017

Olá Jonas, td bem?

Isso está acontecendo porque a primeira coisa que é executada numa instrução SQL, é o que está no WHERE, e o operador OR tem prioridade sob o operador AND, então ele vai procurar a primeira instrução que estiver com OR e executar, se ela for verdadeira, nem passará para a próxima.

Para resolver, basta colocar 'prioridades', nesse caso experimente colocar parêntese.

SELECT * FROM guarnicao 
WHERE 
(data_entrada between '$datainicial' and '$datafinal') 
and 
(guarda1='$guarda' OR guarda2='$guarda' OR guarda3='$guarda' OR guarda4='$guarda' OR guarda5='$guarda')

order by data_entrada desc

GOSTEI 2

Mais Respostas

Jonas

Jonas

03/04/2017

Obrigado pela ajuda... Deu certo...
GOSTEI 0
POSTAR