如何 Mysql ASC 排序 1,2,3,4,5 而不是 1,10,11,12?
How to Mysql ASC order 1,2,3,4,5 not 1,10,11,12?
这是我的查询
$sql=executeQuery("select * from ".PREFIX."frame_info
where Id='".$Id."' $where_clause
order by left(FName, 2), substr(FName, 3) + 0, FName");
PS。我尝试了以下但没有任何效果
- cast(FName as unsigned) ASC
- FName + 0
- 长度(FName),FName
示例数据如下:
Rayban Slim Fit 5,
Rayban Slim Fit 6,
Rayban Slim Fit 7,
Rayban Slim Fit 3,
Rayban Slim Fit 2,
Rayban Slim Fit 1,
Rayban Slim Fit 9,
Rayban Slim Fit 8,
Rayban Slim Fit 10,
Rayban Princess 149,
Rayban Princess 146,
Rayban Princess 118,
Rayban Princess 147,
Rayban 3141,
Rayban 3143,
Rayban 3153,
Rayban 3152,
Rayban 3130,
Rayban 3128
预期结果:
Rayban 3128,
Rayban 3130,
Rayban 3141,
Rayban 3143,
Rayban 3152,
Rayban 3153,
Rayban Princess 118,
Rayban Princess 146,
Rayban Princess 147,
Rayban Princess 149,
Rayban Slim Fit 1,
Rayban Slim Fit 2,
Rayban Slim Fit 3,
Rayban Slim Fit 5,
Rayban Slim Fit 6,
Rayban Slim Fit 7,
Rayban Slim Fit 8,
Rayban Slim Fit 9,
Rayban Slim Fit 10
- 我们可以将 Substring_Index() 函数与分隔符一起用作单个 space 字符 (
' '
)。 -1
将允许我们获得从 FName
末尾到 space 第一次出现的字符串(从右到左)。
- 现在,我们可以使用
CAST(.. AS UNSIGNED)
将数字子字符串转换为整数。
- 使用
Replace()
function with Trim()
获取基本名称(不带数字后缀的字符串)。
- 现在,只需先
Order By
基本名称,然后是后缀编号 ("serial number")
尝试以下查询 (DB Fiddle DEMO):
SELECT Cast(Substring_index(fi.fname, ' ', -1) AS UNSIGNED) AS serial_number,
Trim(REPLACE(fi.fname, Substring_index(fi.fname, ' ', -1), '')) AS
FName_without_serialno,
fi.*
FROM frame_info AS fi
ORDER BY fname_without_serialno,
serial_number
这是我的查询
$sql=executeQuery("select * from ".PREFIX."frame_info
where Id='".$Id."' $where_clause
order by left(FName, 2), substr(FName, 3) + 0, FName");
PS。我尝试了以下但没有任何效果
- cast(FName as unsigned) ASC
- FName + 0
- 长度(FName),FName
示例数据如下:
Rayban Slim Fit 5,
Rayban Slim Fit 6,
Rayban Slim Fit 7,
Rayban Slim Fit 3,
Rayban Slim Fit 2,
Rayban Slim Fit 1,
Rayban Slim Fit 9,
Rayban Slim Fit 8,
Rayban Slim Fit 10,
Rayban Princess 149,
Rayban Princess 146,
Rayban Princess 118,
Rayban Princess 147,
Rayban 3141,
Rayban 3143,
Rayban 3153,
Rayban 3152,
Rayban 3130,
Rayban 3128
预期结果:
Rayban 3128,
Rayban 3130,
Rayban 3141,
Rayban 3143,
Rayban 3152,
Rayban 3153,
Rayban Princess 118,
Rayban Princess 146,
Rayban Princess 147,
Rayban Princess 149,
Rayban Slim Fit 1,
Rayban Slim Fit 2,
Rayban Slim Fit 3,
Rayban Slim Fit 5,
Rayban Slim Fit 6,
Rayban Slim Fit 7,
Rayban Slim Fit 8,
Rayban Slim Fit 9,
Rayban Slim Fit 10
- 我们可以将 Substring_Index() 函数与分隔符一起用作单个 space 字符 (
' '
)。-1
将允许我们获得从FName
末尾到 space 第一次出现的字符串(从右到左)。 - 现在,我们可以使用
CAST(.. AS UNSIGNED)
将数字子字符串转换为整数。 - 使用
Replace()
function withTrim()
获取基本名称(不带数字后缀的字符串)。 - 现在,只需先
Order By
基本名称,然后是后缀编号 ("serial number")
尝试以下查询 (DB Fiddle DEMO):
SELECT Cast(Substring_index(fi.fname, ' ', -1) AS UNSIGNED) AS serial_number,
Trim(REPLACE(fi.fname, Substring_index(fi.fname, ' ', -1), '')) AS
FName_without_serialno,
fi.*
FROM frame_info AS fi
ORDER BY fname_without_serialno,
serial_number