Dans quel ordre cela serait-il évalué. Mon intension est que si elle trouve foo ou bar, elle chercherait aussi lol et rofl.
Est-ce totalement dans les bois? Et si oui, comment évaluer une expression comme ça.Où 'foo' OU 'bar' ET 'lol' OU 'rofl' MySQL
4
A
Répondre
6
The AND
operator has higher precedence than OR
in MySql, de sorte que votre expression actuelle est évaluée comme:
WHERE 'foo' OR ('bar' AND 'lol') OR 'rofl'
Ajouter entre parenthèses à l'expression si vous voulez forcer l'ordre d'évaluation:
WHERE ('foo' OR 'bar') AND ('lol' OR 'rofl')
1
jeter un oeil à the documentation - et a une priorité plus élevée, donc ce serait comme ceci:
WHERE 'foo' OR ('bar' AND 'lol') OR 'rofl'
4
AND
seront traitées en premier lieu, après que OR
seront traitées. Donc, ce sera:
'foo' OR ('bar' AND 'lol') OR 'rofl'
Après cela, il est gauche à droite commande.
0
SELECT
Id, Name
FROM
TestTable
WHERE
(Name = 'foo') OR (Name = 'bar') AND (Name = 'lol') OR (Name = 'rofl')
vous donnera le résultat suivant dans MS SQL Server:
1 foo
4 rofl
Il semble donc qu'il combinera bar et lol et evals foo et rofl séparement comme ceci:
SELECT
Id, Name
FROM
TestTable
WHERE
(Name = 'foo') OR ((Name = 'bar') AND (Name = 'lol')) OR (Name = 'rofl')
Qu'est-ce que vous voulez sans doute faire est (techniquement):
SELECT
Id, Name
FROM
TestTable
WHERE
((Name = 'foo') OR (Name = 'bar')) AND ((Name = 'lol') OR (Name = 'rofl'))
Très bien appriciated. Était sous l'impression que OU avait une priorité plus élevée. Merci. –