MySQL字段排序,数据混乱。

有这样一种情况。在一张数据表中,存在id,存在order_num。这两个字段都是int(10)类型。
现在需要根据order_num字段排序,一切都是正常的。但有一种情况,如果order_num的值是相同的,比如都是0,这时候数据顺序都是混乱的。于是加上一个id字段做额外的排序。操作如下图:
image
image
两者查询的结果却不相同,有人知道这个concat是怎么处理的吗?

阅读 2.4k
2 个回答

concat 以后是按照字符串排序了 9最大 1最小

CONCAT 之后就是字串了,不再是数字。

如 CONCAT(1,10) 是 110,而 CONCAT(10,1) 是 101,显然顺序是 101,110;另外,CONCAT(1,10) 是 110,CONCAT(1,2) 是 12,都是字符串,排序就是 110,12,除非你再用 CAST 转回数字。

因此还是用 ORDER BY a, b 这种更能明确先按哪个排再按哪个排。


当然,您就是想用 CONCAT 后排序,那最好给数字左边补 0,如 CONCAT(LPAD(order_num,10,0), LPAD(id,10,0))

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题