sql >> Database >  >> RDS >> Mysql

Mysql of/en voorrang?

De MySQL-documentatie heeft een goede pagina met informatie over welke operators voorrang hebben.

Vanaf die pagina,

12.3.1. Voorrang van operator

De prioriteit van de operator wordt weergegeven in de volgende lijst, van de hoogste prioriteit tot de laagste. Operators die samen op een regel worden weergegeven, hebben dezelfde prioriteit.

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), :=

Dus je oorspronkelijke vraag

Select
    *
from tablename 
where
    display = 1
    or display = 2
    and content like "%hello world%"
    or tags like "%hello world%"
    or title = "%hello world%"

zou worden geïnterpreteerd als

Select
    *
from tablename 
where 
    (display = 1)
    or (
        (display = 2)
        and (content like "%hello world%")
    )
    or (tags like "%hello world%")
    or (title = "%hello world%")

Gebruik bij twijfel haakjes om uw bedoeling duidelijk te maken. Hoewel de informatie op de MySQL-pagina nuttig is, is het misschien niet meteen duidelijk of de zoekopdracht ooit opnieuw wordt bekeken.

Je zou iets als het volgende kunnen overwegen. Merk op dat ik de title = "%hello world%" . heb gewijzigd naar title like "%hello world%" , omdat dat beter past bij het doel dat je hebt beschreven.

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. Hoe ORA-28000 op te lossen, het account is vergrendeld

  2. Topbronnen voor leren en trainen van PostgreSQL

  3. Verborgen functies van SQL Server

  4. Produceer een `DataSource`-object voor Postgres JDBC, programmatisch