在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