2016-07-14 31 views
1

Ich möchte eine Abfrage der folgenden Art haben:Wie stelle ich ODER in der mysql query where-Klausel OR eine höhere Priorität zur Verfügung?

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

Nach Angaben der Betreiber Vorrang und der Betrieb wird zuerst durchgeführt werden und dann die OR-Operationen. Aber in meinem Fall möchte ich das Spalte1 = 1 ODER Spalte2 = 1 ODER Spalte3 = 1 -> dies und Spalte4 = 1 ODER Spalte5 = 1 -> dies sind zuerst durchgeführt und die Ergebnisse von diesen durch UND-Operation für die gebunden Endergebnis.

Kann ich einfach Klammern hinzufügen, um eine höhere Priorität für OR zu erhalten, wie in den meisten Programmiersprachen oder wie wird das gemacht?

+0

Klammern ausdrücken. –

+1

Wo sind Sie nach der Suche nach mysql operator precedence gelandet? Ich lande [hier] (http://dev.mysql.com/doc/refman/5.7/en/operator-precedence.html): "Um diese Reihenfolge zu überschreiben und Begriffe explizit zu gruppieren, verwende Klammern" –

Antwort

1

Sie müssen Klammern verwenden, und jedes Teil wickeln, wie folgt aus:

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

Sie Klammern hinzufügen. Zusätzlich könnten Sie die Logik mit IN:

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

Ich war auch über Um das OP zu 'Klammern' zu korrigieren, erinnerte ich mich an [BODMAS] (http://www.skillsyouneed.com/num/bodmas.html)! – onedaywhen

+0

@onedaywhen. . . Wir Amerikaner nennen sie "Klammern", aber wir verstehen diese anderen Dialekte;) Wikipedia hat eine ausführliche Diskussion über das Thema: https://en.wikipedia.org/wiki/Bracket. Ich neige dazu, "Klammer" als eine Obermenge von Klammern zu denken. –

+1

Anscheinend ist das US-Äquivalent von BODMAS PEDMAS (Klammern, Exponenten, Division und Multiplikation, Addition und Subtraktion). Wir britischen Softwareingenieure würden sie auch als Parens bezeichnen, denke ich. – onedaywhen