MySQL-dokumentationen har en bra sida med information om vilka operatörer som har företräde.
Från den sidan,
12.3.1. Operatörsprioritet
Operatörsprioriteringar visas i följande lista, från högsta prioritet till lägsta. Operatörer som visas tillsammans på en rad har samma prioritet.
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), :=
Så din ursprungliga fråga
Select
*
from tablename
where
display = 1
or display = 2
and content like "%hello world%"
or tags like "%hello world%"
or title = "%hello world%"
skulle tolkas som
Select
*
from tablename
where
(display = 1)
or (
(display = 2)
and (content like "%hello world%")
)
or (tags like "%hello world%")
or (title = "%hello world%")
När du är osäker, använd parentes för att klargöra din avsikt. Även om informationen på MySQL-sidan är användbar, kanske det inte är omedelbart uppenbart om frågan någonsin återbesöks.
Du kan överväga något i stil med följande. Observera att jag har ändrat title = "%hello world%"
till title like "%hello world%"
, eftersom det passar bättre med det mål du har beskrivit.
Select
*
from tablename
where
(
(display = 1)
or (display = 2)
) and (
(content like "%hello world%")
or (tags like "%hello world%")
or (title like "%hello world%")
)