一尘不染

首先按特定字段值排序

mysql

我有一个包含3列的表格:

id | name | priority
--------------------
 1 | core  |   10
 2 | core  |   9
 3 | other |   8
 4 | board |   7
 5 | board |   6
 6 | core  |   4

我想使用以下顺序来排序结果集,priority但首先name=core要优先考虑那些具有较低优先级的行。结果应如下所示

id | name | priority
--------------------
 6 | core  |   4
 2 | core  |   9
 1 | core  |   10
 5 | board |   6
 4 | board |   7
 3 | other |   8

阅读 306

收藏
2020-05-17

共1个答案

一尘不染

还有MySQL FIELD函数

如果要对所有可能的值进行完整排序:

SELECT id, name, priority
FROM mytable
ORDER BY FIELD(name, "core", "board", "other")

如果您只关心“核心”在前,而其他值则无关紧要:

SELECT id, name, priority
FROM mytable
ORDER BY FIELD(name, "core") DESC

如果要先按“核心”排序,然后按正常排序顺序按其他字段排序:

SELECT id, name, priority
FROM mytable
ORDER BY FIELD(name, "core") DESC, priority

不过,这里有一些警告:

首先,我很确定这是仅mysql的功能-问题被标记为mysql,但您永远不会知道。

其次,注意其FIELD()工作原理:它返回值的从 一开始的索引 -在的情况下FIELD(priority, "core"),如果“
core”是值,则返回1。如果该字段的值不在列表中,则返回 。这就是为什么DESC除非您指定所有可能的值,否则是必需的。

2020-05-17