MySQL选择SQL:如何通过简短的1.1.1,1.1.2等来编写命令

时间:2013-11-19 18:29:06

标签: php mysql sql sorting

在MySQL数据库中,我有4个表,每个表都有一个名为content_id的字段,该字段定义为varchar。 表1中的content_id的值是 1 2 等

表2中的content_id的值是 1.1 1.2 等

表3中的content_id的值是 1.1.2 等

表4中的content_id的值是 1.1.1.1 1.1.1.2 等

我在php中编写了SELECT查询来读取这些表的记录。我已经使用“order by content_id”对记录进行了排序 它适用于表1.但是,对于表2,我在1.2之前得到1.10。表3和表4中存在类似问题。

我知道它为什么会发生 - 这是因为按字母顺序1.10来自1.2

但是,有什么方法可以分类为1.1,1.2,1.3 ...... 1.10,1.11等?

谢谢

2 个答案:

答案 0 :(得分:1)

SELECT *
FROM table1
ORDER BY 1*SUBSTRING_INDEX(content_id, '.', 1) ASC,                      
         1*SUBSTRING_INDEX(content_id, '.', -1) ASC

Sql fiddle

首先按点左边的数字排序,然后按右边的数字排序。它基本上是分割小数。

答案 1 :(得分:-2)

您可以按表达式排序列,所以

SELECT * FROM tbl2 ORDER BY CAST(content_id AS DECIMAL(5,2));

请参阅http://dev.mysql.com/doc/refman/5.5/en/cast-functions.html#function_cast