Order by 多条件排序

首先了解一下基础知识:

  • 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

             ,${sortName} ${sortOrder}

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

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

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

SELECT
	id,
	emp_code,
	create_date
FROM
	A

  
    ORDER BY ${sortName} ${sortOrder}
  
 
   ORDER BY create_date desc
 

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

你可能感兴趣的:(SQL语法)