mysql数据库自定义排序sql语句

有这样一个场景:
一张表中一个字段为 type,type有(1,2,3,4,5,6,7,8)
现在要求查询时的排序规则为 先找 4,5,6然后剩下的在按照升降序排。
Sql语句应该如何写?

select * from table
where xxx
order by field(type,5,4,6)
limit 20

试了下这样写只能 使 5、4、6按照要求排序,其它type还是一样乱。
注意:不能把 1-9的具体排序都写出来,要求是 5,4,6,在最前,其它的升降序
求大神指教

4个回答

 SELECT * FROM table  order by (
    case
     when type=4 then 1 
          when type=5 then 2
        when type=6 then 3
                ELSE 4 END),type ASC;

order by field()用法我也没用过,不过我简单测试了一下

 select * from t_user t order by field(id,6,4,5) desc limit 20;

这样能达到你的目标

原表数据

图片说明

使用该语句查询结果

图片说明

解决了,决定用 order by case when 的方法,三个回答都很好,要是币能平分就好啦。

g_man1990
808a73097dda5232 这种问题,搜索MySQL 自定义排序就有了。field(id,6,4,5) 这个函数是最简洁的~
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问