Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL czy/i pierwszeństwo?

Dokumentacja MySQL ma dobrą stronę z informacją, którzy operatorzy mają pierwszeństwo.

Z tej strony

12.3.1. Pierwszeństwo operatora

Pierwszeństwo operatorów pokazano na poniższej liście, od najwyższego do najniższego. Operatory pokazane razem w linii mają ten sam priorytet.

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

Więc Twoje pierwotne zapytanie

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

będzie interpretowane jako

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

W razie wątpliwości użyj nawiasów, aby jasno wyrazić swoją intencję. Chociaż informacje na stronie MySQL są pomocne, może nie być od razu oczywiste, czy zapytanie zostanie kiedykolwiek ponownie odwiedzone.

Możesz rozważyć coś takiego. Zauważ, że zmieniłem title = "%hello world%" do title like "%hello world%" , ponieważ lepiej pasuje do opisanego przez Ciebie celu.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Naprawianie uszkodzonego kodowania UTF-8

  2. Środowisko pracy MySQL

  3. Jak skonfigurować replikację źródła-repliki w MySQL?

  4. Procedury składowane MySQL

  5. Nie można zmienić kolumny używanej w ograniczeniu klucza obcego