Mysql"操作顺序"问题

Dir*_*irk 2 mysql sql select

这是我的情况:我想从数据库WHERE id = $ id中选择所有条目.但我希望结果列在一定的优先级.如果,criteria = $ criteria,那么我希望首先显示这些结果.否则,我只想继续显示其余的行.

我的问题是:这会解决我的问题吗?

SELECT field1 WHERE (criteria=$criteria AND id = $id) OR id=$id  LIMIT 5 
Run Code Online (Sandbox Code Playgroud)

查询会首先查看()吗?如果没有,是否有另一种方法可以做到这一点,而不将其分成两个单独的查询?

谢谢,
迈克尔

Qua*_*noi 5

SELECT  field1
FROM    mytable
WHERE   id = $id
ORDER BY
        criteria = $criteria DESC, id
LIMIT 5
Run Code Online (Sandbox Code Playgroud)

, 或这个:

SELECT  *
FROM    (
        SELECT  field1
        FROM    mytable
        WHERE   id = $id
                AND criteria = $criteria
        ORDER BY
                id
        LIMIT 5
        ) q
UNION
FROM    (
        SELECT  field1
        FROM    mytable
        WHERE   id = $id
        ORDER BY
                id
        LIMIT 5
        ) q2
ORDER BY
        criteria = $criteria DESC, id
LIMIT 5
Run Code Online (Sandbox Code Playgroud)

如果你有一个索引(id, criteria)(按此顺序),后者更有效.

  • @Michael:`criteria = $ criteria DESC`是一个布尔表达式."TRUE"是"1","FALSE"是"0".`DESC`首先使`TRUE`值成为现实. (2认同)