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
它会给你
12
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