Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL选择SQL:如何将order by写入short 1.1.1、1.1.2等_Php_Mysql_Sql_Sorting - Fatal编程技术网

Php MySQL选择SQL:如何将order by写入short 1.1.1、1.1.2等

Php MySQL选择SQL:如何将order by写入short 1.1.1、1.1.2等,php,mysql,sql,sorting,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查询来读取这些表的记录。我已使用按内容排序\u id对记录进行排序 它适用于表1。然而,对于表2,我在1.2之前得到1.10。

在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查询来读取这些表的记录。我已使用按内容排序\u 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 tbl2 ORDER BY CAST(content_id AS DECIMAL(5,2));


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

您是否尝试过按顺序转换为浮点?将数字转换为数值。但是,如果你也有像1.2.1这样的数字,这可能会失败。无论如何,我希望一个名为xyz_id的字段包含一个整数。这并不容易。如果您知道每个集合的最大长度为2个字符,则可以在排序时在只有一个空格长的集合前面添加一个零。因此,1.1变为01.01,因此它将正确排序。然而,如果你有一个1.101,那么他们需要在前面有2个零。每个部分最多可以有2个字符长度。所以你是对的,如果某个部分有1个字符,那么在开头放0会有帮助,但我想知道如果没有1个字符,是否可以这样做
SELECT *
FROM table1
ORDER BY 1*SUBSTRING_INDEX(content_id, '.', 1) ASC,                      
         1*SUBSTRING_INDEX(content_id, '.', -1) ASC