在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等?
谢谢
答案 0 :(得分:1)
SELECT *
FROM table1
ORDER BY 1*SUBSTRING_INDEX(content_id, '.', 1) ASC,
1*SUBSTRING_INDEX(content_id, '.', -1) ASC
首先按点左边的数字排序,然后按右边的数字排序。它基本上是分割小数。
答案 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