最近公司一个业务需要将订单列表根据每个状态的不同按时间正序倒序排列。
举个列子待付款的按生成时间升序,交易成功的按生成时间倒序且预付款的数据在前,成功的数据在后。订单表order
(select * from order where status =1 order by create_time asc)
union all
(select * from order where status =2 order by create_time desc)
注意:要打上括号不然会报错。因为union中,在不用括号的情况下,只能用一个order by。
按照我的本意,这条sql的执行顺序:顺序执行select * from order where status =1 order by create_time asc,select * from order where status =2 order by create_time desc,然后在union起来
可惜最后的结果却不是自己想要的,数据最终全部按asc排序出来的
百思不得其解,只好求助度娘,发现了一个句话
在子句中,order by 需要配合limit使用才有意义。如果不配合limit使用,会被语法分析器优化分析时去除。
最后一句,我只能说涨知识了