查询列表,排序时关于排序字段为空值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值很多的话是不会走索引的。所以排序字段一定要有业务意义,比如数字类型,时间类型。字符类型不应该支持排序(除非是规则性很强的字符)

 

posted @ 2023-05-30 23:15  了悟  阅读(830)  评论(0编辑  收藏  举报