mysql 补全三位数字,根据数字大小排序 LPAD CONCAT
一、需求
比如我有这样一些数据
id | category_id | sort_id | word |
---|---|---|---|
1 | 2 | 10 | 人民 |
2 | 3 | 2 | 群众 |
3 | 5 | 7 | 中国 |
我需要实现:先根据 sort_id 排序,再通过 category_id 排序
二、解决思路
通过将 sort_id 和 category_id 两个值合到一起进行字符排序才实现。上面三条记录就是
- 10-2
- 2-3
- 7-5
但这里有个问题,默认的字符排序如果不补全前面的0的话, 10 是要比 2 靠前的,所以我们需要:
- 将 2 补全成 002
- 将 10 补全成 010
补全需要用到数据库的一个方法
LPAd(原字符串,补全位数,用于补全的字符串)
就是
lpad(sort_id, 3, '000')
补全之后,需要将这两个字符串拼接起来,就需要数据库的 concat() 方法
concat(str, str)
所以合起来就是:
concat(lpad(sort_id, 3, '000'), lpad(category_id, 3, '000'))
三、结果
最终的排序就是:
id | category_id | sort_id | word |
---|---|---|---|
2 | 3 | 2 | 群众 |
3 | 5 | 7 | 中国 |
1 | 2 | 10 | 人民 |