Tài liệu MySQL có trang tốt với thông tin về những toán tử nào được ưu tiên.
Từ trang đó,
12.3.1. Mức độ ưu tiên của nhà khai thác
Các ưu tiên của toán tử được hiển thị trong danh sách sau, từ ưu tiên cao nhất đến thấp nhất. Các toán tử được hiển thị cùng nhau trên một dòng có cùng mức độ ưu tiên.
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), :=
Vì vậy, truy vấn ban đầu của bạn
Select
*
from tablename
where
display = 1
or display = 2
and content like "%hello world%"
or tags like "%hello world%"
or title = "%hello world%"
sẽ được hiểu là
Select
*
from tablename
where
(display = 1)
or (
(display = 2)
and (content like "%hello world%")
)
or (tags like "%hello world%")
or (title = "%hello world%")
Khi nghi ngờ, hãy sử dụng dấu ngoặc đơn để làm rõ ý định của bạn. Mặc dù thông tin trên trang MySQL là hữu ích, nhưng có thể không rõ ràng ngay lập tức nếu truy vấn được truy cập lại.
Bạn có thể xem xét một cái gì đó như sau. Lưu ý rằng tôi đã thay đổi title = "%hello world%"
đến title like "%hello world%"
, vì điều đó phù hợp hơn với mục tiêu bạn đã mô tả.
Select
*
from tablename
where
(
(display = 1)
or (display = 2)
) and (
(content like "%hello world%")
or (tags like "%hello world%")
or (title like "%hello world%")
)