欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Order by 多条件排序

程序员文章站 2024-03-05 16:48:37
...

首先了解一下基础知识:

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

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

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

id emp_code create_date
1 100101 2015-01-02
2 100102 2017-04-12
3 100103 2016-03-14
4 100104 2018-11-06
5 100105 2018-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
<if test="sortName == null or sortName == ''">
 ORDER BY create_date desc
</if>
<if test="sortName != null and sortName != ''">
 ORDER BY ${sortName} ${sortOrder}
</if>

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

相关标签: order by多条件