Operadores OR

03/04/2017

0

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

Responder

Post mais votado

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

Aline Bianchini

Aline Bianchini
Responder

Mais Posts

05/04/2017

Jonas

Obrigado pela ajuda... Deu certo...
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar