sql >> Databáze >  >> RDS >> Mysql

Mysql nebo/a přednost?

Dokumentace MySQL má dobrou stránku s informací o tom, kteří operátoři mají přednost.

Z této stránky

12.3.1. Priorita operátora

Priority operátorů jsou uvedeny v následujícím seznamu, od nejvyšší po nejnižší. Operátory zobrazené společně na řádku mají stejnou prioritu.

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

Takže váš původní dotaz

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

by bylo interpretováno jako

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

V případě pochybností použijte závorky, aby byl váš záměr jasný. I když jsou informace na stránce MySQL užitečné, nemusí být hned zřejmé, zda se dotaz někdy vrátí.

Můžete zvážit něco jako následující. Všimněte si, že jsem změnil title = "%hello world%" na title like "%hello world%" , protože to lépe odpovídá cíli, který jste popsali.

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. Víte, kdy opakovat nebo selhat při volání SQL Server z C#?

  2. Provádění sady SQL dotazů pomocí dávkového souboru?

  3. Zlepšení údržby oddílu pomocí přírůstkové statistiky

  4. Odstranění trasovacích souborů pomocí ADRCI