我将一些值存储在mysql数据库中,并根据此序列存储值。当我正在检索我的结果时,这个订单对我有帮助..
1
1.1
1.1.1
1.1.2
1.2
1.2.1
1.2.2
2
3.1.1
3.1.2
4
4.1
4.2
4.3
4.3.1
这种方法很有效,直到我添加10,11,12,13等值。添加它们时它们就像这样放置。
1
1.1
1.1.1
1.1.2
1.2
1.2.1
1.2.2
11
12
13
14
2
3.1.1
3.1.2
4
4.1
4.2
4.3
4.3.1
我需要根据数据库中的第一个数值放置它们。这样做不可能吗?如果有,还有其他方法可以做我需要的东西吗?
答案 0 :(得分:3)
只需将字符串转换为数字,按数字排序,然后按字符串排序:
SELECT col FROM t
ORDER BY col+0, col
| COL |
|-------|
| 1 |
| 1.1 |
| 1.1.1 |
| 1.1.2 |
| 1.2 |
| 1.2.1 |
| 1.2.2 |
| 2 |
| 3.1.1 |
| 3.1.2 |
| 4 |
| 4.1 |
| 4.2 |
| 4.3 |
| 4.3.1 |
| 10 |
| 11 |
| 12 |
| 13 |
小提琴here。
我提供的解决方案只会根据每个字符串的first numeric value
进行排序。其余的将被视为一个字符串。您可以解析其余的字符串值并根据该结果进行排序,但效率非常低。
正确的解决方法是,如果要分别对3个数值进行排序,则创建3个数字列。 不要使用字符串对数值进行排序。这样,'2.10'
之类的一个值将来2
,10
,0
,排序将由
ORDER BY col1, col2, col3
如果要选择以点分隔的三个数字,则可以使用:
SELECT CONCAT_WS('.', col1, col2, col3) FROM t
ORDER BY col1, col2, col3
小提琴here。