De MySQL-documentatie heeft een goede pagina met informatie over welke operators voorrang hebben.
Vanaf die pagina,
12.3.1. Voorrang van operator
De prioriteit van de operator wordt weergegeven in de volgende lijst, van de hoogste prioriteit tot de laagste. Operators die samen op een regel worden weergegeven, hebben dezelfde prioriteit.
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), :=
Dus je oorspronkelijke vraag
Select
*
from tablename
where
display = 1
or display = 2
and content like "%hello world%"
or tags like "%hello world%"
or title = "%hello world%"
zou worden geïnterpreteerd als
Select
*
from tablename
where
(display = 1)
or (
(display = 2)
and (content like "%hello world%")
)
or (tags like "%hello world%")
or (title = "%hello world%")
Gebruik bij twijfel haakjes om uw bedoeling duidelijk te maken. Hoewel de informatie op de MySQL-pagina nuttig is, is het misschien niet meteen duidelijk of de zoekopdracht ooit opnieuw wordt bekeken.
Je zou iets als het volgende kunnen overwegen. Merk op dat ik de title = "%hello world%"
. heb gewijzigd naar title like "%hello world%"
, omdat dat beter past bij het doel dat je hebt beschreven.
Select
*
from tablename
where
(
(display = 1)
or (display = 2)
) and (
(content like "%hello world%")
or (tags like "%hello world%")
or (title like "%hello world%")
)