Dokumentacja MySQL ma dobrą stronę z informacją, którzy operatorzy mają pierwszeństwo.
Z tej strony
12.3.1. Pierwszeństwo operatora
Pierwszeństwo operatorów pokazano na poniższej liście, od najwyższego do najniższego. Operatory pokazane razem w linii mają ten sam priorytet.
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), :=
Więc Twoje pierwotne zapytanie
Select
*
from tablename
where
display = 1
or display = 2
and content like "%hello world%"
or tags like "%hello world%"
or title = "%hello world%"
będzie interpretowane jako
Select
*
from tablename
where
(display = 1)
or (
(display = 2)
and (content like "%hello world%")
)
or (tags like "%hello world%")
or (title = "%hello world%")
W razie wątpliwości użyj nawiasów, aby jasno wyrazić swoją intencję. Chociaż informacje na stronie MySQL są pomocne, może nie być od razu oczywiste, czy zapytanie zostanie kiedykolwiek ponownie odwiedzone.
Możesz rozważyć coś takiego. Zauważ, że zmieniłem title = "%hello world%"
do title like "%hello world%"
, ponieważ lepiej pasuje do opisanego przez Ciebie celu.
Select
*
from tablename
where
(
(display = 1)
or (display = 2)
) and (
(content like "%hello world%")
or (tags like "%hello world%")
or (title like "%hello world%")
)