MySQL दस्तावेज़ में एक अच्छा पृष्ठ है। उन सूचनाओं के साथ जिन पर ऑपरेटरों को प्राथमिकता दी जाती है।
उस पेज से,
<ब्लॉकक्वॉट>12.3.1. ऑपरेटर वरीयता
उच्चतम प्राथमिकता से निम्नतम तक, निम्न सूची में ऑपरेटर प्राथमिकताएं दिखाई जाती हैं। एक लाइन पर एक साथ दिखाए जाने वाले ऑपरेटरों की प्राथमिकता समान होती है।
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), :=
तो आपकी मूल क्वेरी
Select
*
from tablename
where
display = 1
or display = 2
and content like "%hello world%"
or tags like "%hello world%"
or title = "%hello world%"
के रूप में व्याख्या की जाएगी
Select
*
from tablename
where
(display = 1)
or (
(display = 2)
and (content like "%hello world%")
)
or (tags like "%hello world%")
or (title = "%hello world%")
जब संदेह हो, तो अपना इरादा स्पष्ट करने के लिए कोष्ठक का उपयोग करें। हालांकि MySQL पेज पर दी गई जानकारी मददगार है, लेकिन अगर क्वेरी पर दोबारा गौर किया जाता है तो यह तुरंत स्पष्ट नहीं हो सकता है।
आप निम्न की तरह कुछ विचार कर सकते हैं। ध्यान दें कि मैंने title = "%hello world%"
. को बदल दिया है title like "%hello world%"
. के लिए , क्योंकि यह आपके द्वारा वर्णित लक्ष्य के साथ बेहतर रूप से फिट बैठता है।
Select
*
from tablename
where
(
(display = 1)
or (display = 2)
) and (
(content like "%hello world%")
or (tags like "%hello world%")
or (title like "%hello world%")
)