2016-07-14 1 views
1

я хочу есть запрос следующего характера:Как обеспечить более высокий приоритет OR, чем AND, в запросе mysql where where?

"SELECT * FROM table1 where column1=1 OR column2=1 OR column3=1 AND column4=1 OR column5=1"; 

В соответствии с оператором приоритета, и операция будет выполнена первой, а затем ИЛИ операции. Но в моем случае я хочу, чтобы это column1 = 1 ИЛИ column2 = 1 ИЛИ column3 = 1 -> this и column4 = 1 ИЛИ column5 = 1 -> это выполняется первым, а результаты от них связаны операцией AND для конечный результат.

Могу ли я просто добавить скобки, чтобы получить более высокий приоритет для ИЛИ, как на большинстве языков программирования, или как это делается?

+0

Кронштейны сделают. –

+1

Где вы оказались после поиска 'mysql приоритета оператора'? Я в конечном итоге [здесь] (http://dev.mysql.com/doc/refman/5.7/en/operator-precedence.html): «Чтобы явно переопределить этот порядок и групповые условия, используйте круглые скобки» –

ответ

1

Вы должны использовать скобки и обернуть каждую часть, например:

SELECT * FROM table1 
where (column1=1 OR column2=1 OR column3=1) AND (column4=1 OR column5=1) 
1

Вы можете добавить круглые скобки. Кроме того, вы можете выразить логику с использованием IN:

SELECT * 
FROM table1 
WHERE 1 IN (column1, column2, column3) AND 1 IN (column4, column5); 
+0

Я тоже был о чтобы скорректировать OP в «круглые скобки», тогда я вспомнил [BODMAS] (http://www.skillsyouneed.com/num/bodmas.html)! – onedaywhen

+0

@onedaywhen. , , Мы, американцы, называем их «круглыми скобками», но мы понимаем эти другие диалекты;) Википедия имеет обширное обсуждение по этому вопросу: https://en.wikipedia.org/wiki/Bracket. Я склонен думать о «скобке» как о расширении круглых скобок. –

+1

По-видимому, американский эквивалент BODMAS - это ПЕДАГИ (скобки, экспоненты, разделение и умножение, добавление и вычитание). Я думаю, что мы, британские разработчики программного обеспечения, тоже будем называть их parens. – onedaywhen

Смежные вопросы