Order by 多条件排序

首先了解一下基础知识:

  • order by可以按一个或多个(最多16个)字段排序查询结果,可以是升序(ASC)也可以是降序(DESC),如果缺省,则是升序。
  • order by中如果定义了多个字段,则按照字段的先后顺序排序。 
  • order by通常放在SQL语句的最后。

最近由于需要对一张表进行排序,由前端传递排序字段以及排序规则,由于忽视了多条件排序规则,所以导致BUG。

首先来看一下表数据(简化)

idemp_codecreate_date
11001012015-01-02
21001022017-04-12
31001032016-03-14
41001042018-11-06
51001052018-06-22

原业务是查询功能,所以我用了以下SQL,本意是想默认以创建时间降序查询,但是也支持前端emp_code排序

SELECT
	id,
	emp_code,
	create_date
FROM
	A
ORDER BY
	create_date desc
<if test="sortName != null and sortName != ''">
             ,${sortName} ${sortOrder}
</if>

so,联调的时候,SQL执行是没问题的,但是总是不能按照emp_code去执行,这里我忽视了一条总要的规则:

多条件查询,首先从左到右执行排序,当遇到第一个排序字段值相同,再继续以第二个排序字段进行排序。

知道上面这条,我对我的SQL进行变化:

SELECT
	id,
	emp_code,
	create_date
FROM
	A
<choose>
  <when test="sortName != null and sortName != ''">
    ORDER BY ${sortName} ${sortOrder}
  </when>
 <otherwise>
   ORDER BY create_date desc
 </otherwise>
</choose>

这样既满足无排序条件下按照创建日期倒序排列,又能满足当前端传递参数时,按照前端要求进行排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值