根据mysql数据库中的特定顺序排序行顺序

时间:2013-12-01 03:49:33

标签: mysql

我将一些值存储在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

我需要根据数据库中的第一个数值放置它们。这样做不可能吗?如果有,还有其他方法可以做我需要的东西吗?

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'之类的一个值将来2100,排序将由

执行
ORDER BY col1, col2, col3

如果要选择以点分隔的三个数字,则可以使用:

SELECT CONCAT_WS('.', col1, col2, col3) FROM t
ORDER BY col1, col2, col3

小提琴here