iSuperGifted
2018-09-04 10:11
采纳率: 100%
浏览 1.5k

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条回答 默认 最新

  • 摇摆Maori 2018-09-04 10:38
    已采纳
     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;
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • 爱_LOVE 2018-09-04 10:24
    评论
    解决 无用
    打赏 举报
  • liuxing9345 2018-09-04 10:36

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

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

    这样能达到你的目标

    原表数据

    图片说明

    使用该语句查询结果

    图片说明

    评论
    解决 无用
    打赏 举报
  • iSuperGifted 2018-09-05 01:04

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

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题