La documentazione MySQL ha una buona pagina con informazioni su quali operatori hanno la precedenza.
Da quella pagina,
12.3.1. Precedenza dell'operatore
Le precedenze degli operatori sono mostrate nell'elenco seguente, dalla precedenza più alta alla più bassa. Gli operatori mostrati insieme su una riga hanno la stessa precedenza.
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), :=
Quindi la tua domanda originale
Select
*
from tablename
where
display = 1
or display = 2
and content like "%hello world%"
or tags like "%hello world%"
or title = "%hello world%"
verrebbe interpretato come
Select
*
from tablename
where
(display = 1)
or (
(display = 2)
and (content like "%hello world%")
)
or (tags like "%hello world%")
or (title = "%hello world%")
In caso di dubbio, usa le parentesi per chiarire le tue intenzioni. Sebbene le informazioni sulla pagina MySQL siano utili, potrebbe non essere immediatamente evidente se la query viene mai rivista.
Potresti considerare qualcosa di simile al seguente. Nota che ho cambiato il title = "%hello world%"
a title like "%hello world%"
, poiché si adatta meglio all'obiettivo che hai descritto.
Select
*
from tablename
where
(
(display = 1)
or (display = 2)
) and (
(content like "%hello world%")
or (tags like "%hello world%")
or (title like "%hello world%")
)