sql >> Database teknologi >  >> RDS >> Mysql

Mysql eller/og forrang?

MySQL-dokumentationen har en god side med oplysninger om, hvilke operatører der har forrang.

Fra den side,

12.3.1. Operatørpræference

Operatørpræferencer er vist i den følgende liste, fra højeste prioritet til laveste. Operatører, der vises sammen på en linje, har samme forrang.

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 oprindelige forespørgsel

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

ville blive fortolket 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 er i tvivl, så brug parentes til at gøre din hensigt klar. Selvom oplysningerne på MySQL-siden er nyttige, er det muligvis ikke umiddelbart indlysende, hvis forespørgslen nogensinde bliver genbehandlet.

Du kan overveje noget som det følgende. Bemærk, at jeg har ændret title = "%hello world%" til title like "%hello world%" , da det passer bedre med det mål, du har beskrevet.

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. Sådan indsætter du store mængder data i sqlite-databasen i Android

  2. Hvordan får man ID for den sidst opdaterede række i MySQL?

  3. Sådan administrerer du privilegier med roller i MySQL

  4. Forespørgsel på flere databaser på én gang