Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.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 SQL升序中的按数值排序_Php_Mysql_Sql Order By - Fatal编程技术网

Php SQL升序中的按数值排序

Php SQL升序中的按数值排序,php,mysql,sql-order-by,Php,Mysql,Sql Order By,我正试图得到这个输出 MDT 1 MDT 2 MDT 3 MDT 11 MDT 44 但是,这些值是按字母顺序排列的,所以123排在2之前 例如: MDT 1 MDT 11 MDT 156 MDT 2 MDT 3 MDT 303 MDT 44 等等 我正在使用这个代码,但它似乎不起作用 SELECT * FROM file ORDER BY ABS(ID) ASC 我如何解决这个问题?试试那个片段 SELECT * FROM file ORDER BY ID + 0 ASC 如果您的ID

我正试图得到这个输出

MDT 1
MDT 2
MDT 3
MDT 11
MDT 44
但是,这些值是按字母顺序排列的,所以123排在2之前

例如:

MDT 1
MDT 11
MDT 156
MDT 2
MDT 3
MDT 303
MDT 44
等等

我正在使用这个代码,但它似乎不起作用

SELECT * FROM file ORDER BY ABS(ID) ASC
我如何解决这个问题?

试试那个片段

SELECT * FROM file ORDER BY ID + 0 ASC

如果您的ID始终包含前缀为
MDT
,则您可以使用该前缀根据您的要求进行排序:

SELECT * FROM File 
ORDER BY CAST(replace(ID, 'MDT ', '') AS UNSIGNED) ASC

SUBSTRING()
将提取
'MDT'
之后的所有字符,
CONVERT()
将剩余的子字符串更改为无符号整数,并对其执行
排序


注意
SUBSTR()
SUBSTRING()的同义词

尝试这样做,它将根据数字进行排序:

select substr(id,4)*1 from file order by substr(id,4)*1
它会给你

1
2
3
11
44
...

如果需要所有字段,请根据字符串长度(例如:id=proj-001911-->获取substr(id,6)*1))尝试以下查询(“substr(id,4)”或“substr(id,5)”


我也在搜索它,但就在阅读这里的时候,我在脑海中找到了一个解决方案,如果该列只有数字作为数据,那么您需要在数据库表中进行修改,并将该列定义为INT-value类型,那么我确信您需要做的事情将会完成。
例如,
{SELECT*FROM file ORDER BY CONVERT(SUBSTRING(ID,5),UNSIGNED)ASC}
在这种情况下,
CONVERT
是列,需要定义为
INT(5)
将起作用。

+1..我认为id和mdt在不同的字段中..但它在sameMDT中作为id的默认名称。它在同一个字段中。然后,上面的查询将起作用,因为它删除mdt并对剩余整数值进行排序,将其转换为整数。请检查SQL Fiddle演示以了解它的作用。相关的抱歉,该片段将被删除将字符串转换为int
select substr(id,4)*1 from file order by substr(id,4)*1
select * from file order by substr(id,4)*1