MySQL-dokumentationen har en god side med oplysninger om, hvilke operatører der har forrang.
Fra den side,
12.3.1. Operatørpræference
Operatørpræferencer er vist i den følgende liste, fra højeste prioritet til laveste. Operatører, der vises sammen på en linje, har samme forrang.
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 oprindelige forespørgsel
Select
*
from tablename
where
display = 1
or display = 2
and content like "%hello world%"
or tags like "%hello world%"
or title = "%hello world%"
ville blive fortolket 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 er i tvivl, så brug parentes til at gøre din hensigt klar. Selvom oplysningerne på MySQL-siden er nyttige, er det muligvis ikke umiddelbart indlysende, hvis forespørgslen nogensinde bliver genbehandlet.
Du kan overveje noget som det følgende. Bemærk, at jeg har ændret title = "%hello world%"
til title like "%hello world%"
, da det passer bedre med det mål, du har beskrevet.
Select
*
from tablename
where
(
(display = 1)
or (display = 2)
) and (
(content like "%hello world%")
or (tags like "%hello world%")
or (title like "%hello world%")
)