SQL语句 ORDER BY 多条件排序优先级(嵌套if语句)

需求

需求是,先根据A字段排序,排好序后得到一系列结果。然后再根据得到的结果根据B字段排序,得到最终结果。

按照这样排好序的顺序是这样的:把符合条件的单独几行,可以放在查询结果的开始,或者查询结果的尾部。

举个例子:

现在有一张博客表,我想先根据id排好序,然后再根据是否推荐(recommend字段为1就是推荐,0就是不推荐)排序。最后期望排序结果如下图所示:
在这里插入图片描述
可以看到,两者都进行了排序,但是优先级是 recommend > id。

SQL代码

废话不多说直接上代码:

SELECT
    b.`title`,b.`id`,b.`recommend`
FROM
    t_blog b
        
ORDER BY IF (b.`recommend`='1',0,1),b.`id` DESC

就是使用ORDER BY配合IF语句

这里需要注意:

IF (b.recommend=‘1’,0,1),b.id

这句话的意思是,我对id进行排序的同时,给id附加一个隐藏属性,这个隐藏属性,可以是0或者1

什么意思呢?就是在对id排序的时候,优先级是判断recommend是否为1,如果是,返回0,如果不是,返回1.

随后,先进行recommend属性的排序,隐藏属性拍完以后,再进行剩余id的排序,最终得到排序结果

本文部分参考:MySQL ORDER BY IF() 及多条件排序

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值