今天写项目,遇到个问题,数据进项排序的时候要按照升序,但是值为0的要放在最后面,并且按照时间倒序,当时想了一会,没想到好的办法,最后只能借助度娘的力量,找到了解决办法
这里我们要orderby按照升序排序,但是值为0的要按照create_time倒序排序,这里我们可以这样解决
方法一:
SELECT id,create_time,orderby FROM `audit_system_file` WHERE `delete_tag` = 0 AND `tag` = 1 ORDER BY orderby!=0 desc,orderby,create_time desc
方法二:
SELECT id,create_time,orderby FROM `audit_system_file` WHERE `delete_tag` = 0 AND `tag` = 1 ORDER BY orderby=0 asc,orderby,create_time desc
总结:
select * from xxx order by x=0 asc, x
第一个排序关键字x=0的结果为false、true,x字段值为0的数据x=0结果为true,使用asc确保0排在最后面,对于x=0结果为false的数据,然后再按照x的值升序排列。
同理select * from xxx order by x!=0 desc, x