为了账号安全,请及时绑定邮箱和手机立即绑定

首先按特定字段值排序

首先按特定字段值排序

一只萌萌小番薯 2019-08-31 15:56:24
我有一个有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
查看完整描述

3 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

还有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-only功能 - 问题是标记为mysql,但你永远不知道。


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


查看完整回答
反对 回复 2019-08-31
?
莫回无

TA贡献1865条经验 获得超7个赞

一般来说你可以做到


select * from your_table

order by case when name = 'core' then 1 else 2 end,

         priority 

特别是在MySQL中你也可以这样做


select * from your_table

order by name <> 'core',

         priority 

由于MySQL中的比较的结果是要么  0或者1,您可以通过该结果进行排序。


查看完整回答
反对 回复 2019-08-31
  • 3 回答
  • 0 关注
  • 502 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信