sql >> Databasteknik >  >> RDS >> Mysql

Mysql eller/och prioritet?

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%")
    )


  1. Hur infogar/uppdaterar man större data i Oracle-tabellerna?

  2. Hur söker man i flera kolumner i MySQL?

  3. 4 funktioner för att formatera ett tal till 2 decimaler i SQL Server

  4. lokala samlingstyper är inte tillåtna i SQL-satser