MySQLのドキュメントには、適切なページ があります。 どの演算子が優先されるかに関する情報が含まれています。
そのページから
12.3.1。演算子の優先順位
次のリストに、優先順位の高いものから低いものへと、演算子の優先順位を示します。 1行に一緒に表示される演算子は、同じ優先順位を持ちます。
INTERVAL BINARY, COLLATE ! - (unary minus), ~ (unary bit inversion) ^ *, /, DIV, %, MOD -, + <<, >> & | = (comparison), <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN BETWEEN, CASE, WHEN, THEN, ELSE NOT &&, AND XOR ||, OR = (assignment), :=
つまり、元のクエリ
Select
*
from tablename
where
display = 1
or display = 2
and content like "%hello world%"
or tags like "%hello world%"
or title = "%hello world%"
と解釈されます
Select
*
from tablename
where
(display = 1)
or (
(display = 2)
and (content like "%hello world%")
)
or (tags like "%hello world%")
or (title = "%hello world%")
疑わしい場合は、括弧を使用して意図を明確にしてください。 MySQLページの情報は役に立ちますが、クエリが再検討されたかどうかはすぐにはわからない場合があります。
あなたは次のようなことを考えるかもしれません。 title = "%hello world%"
を変更したことに注意してください title like "%hello world%"
、それはあなたが説明した目標によりよく合うからです。
Select
*
from tablename
where
(
(display = 1)
or (display = 2)
) and (
(content like "%hello world%")
or (tags like "%hello world%")
or (title like "%hello world%")
)