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除非您指定所有可能的值,否则这是必要的原因。
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,您可以通过该结果进行排序。
添加回答
举报