我有一个包含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要优先考虑那些具有较低优先级的行。结果应如下所示
priority
name=core
id | name | priority -------------------- 6 | core | 4 2 | core | 9 1 | core | 10 5 | board | 6 4 | board | 7 3 | other | 8
还有MySQL FIELD函数。
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除非您指定所有可能的值,否则是必需的。
FIELD()
FIELD(priority, "core")
DESC