在一个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等进行排序?

谢谢

最佳答案

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


Sql fiddle

它首先按点左边的数字排序,然后按点右边的数字排序,实际上是将小数点分开。

10-04 18:28