我有一个包含3列的表格:
1 | core | 10 2 | core | 9 3 | other | 8 4 | board | 7 5 | board | 6 6 | core | 4 我想使用以下顺序来排序结果集,priority但首先name=core要优先考虑那些具有较低优先级的行。结果应如下所示
6 | core | 4 2 | core | 9 1 | core | 10 5 | board | 6 4 | board | 7 3 | other | 8
还有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除非您指定所有可能的值,否则是必需的。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。