MySQL选择SQL:如何通过短1.1.1、1.1.2等编写订单


MySQL select SQL: how to write order by to short 1.1.1, 1.1.2 etc

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

表2中content_id的值为1.11.2等

表3中content_id的值为1.1.2等

表4中content_id的值为1.1.1.11.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等等?

感谢

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

Sql小提琴

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

您可以通过表达式对列进行排序,因此

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