查询列表,排序时关于排序字段为空值null和空串""时的解决方案。(Mysql)
首先这是一次不规范编码出现的问题
1.mysql默认null是最小的,也就是说正序null会排在最上面,然后是空串,然后是有值的数据。
2.我们可以在排序添加加上 is null 这个在加排序条件 null就会排在后面,其他正常排序
SELECT customer_id,deal_status,update_time FROM `yx_crm_customer` ORDER BY update_time is null, update_time
还有一个小技巧是在字段前面加上一个负号,也就是减号,ASC改成DESC ,DESC改成ASC
但是 如果现在你的该列数据除了null还有空串的话,那空串会排在最上面,也就是说加is null并不会解决问题
当然上面的例子只是为了展示现象,并无实际意义,这些也都是测试数据。
解决方案:如果有权限,先把垃圾数据清理掉,或赋值
1.首先限制输入,新增的时候用户未输入该值的话,要么为null,要么为""。两种都有的情况是极不合理的。
2.可能的话,数据库给予默认值
3.像create_time,update_time 这种在新增的时候必须赋值
排序字段实际是不该为null和"",而且数据量大的时候肯定要加索引的,如果加索引,但该列null值很多的话是不会走索引的。所以排序字段一定要有业务意义,比如数字类型,时间类型。字符类型不应该支持排序(除非是规则性很强的字符)
下班记得打卡