如何将mysql asc顺序改为1,2,3,4,5而不是1,10,11,12?

ee7vknir  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(316)

这是我的问题

$sql=executeQuery("select * from ".PREFIX."frame_info 
                   where Id='".$Id."' $where_clause 
                   order by left(FName, 2), substr(FName, 3) + 0, FName");

另外,我试过以下方法,但没有效果
强制转换(fname as unsigned)asc
名称+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
ghhaqwfi

ghhaqwfi1#

我们可以将分隔符用作单个空格字符的substring\ u index()函数( ' ' ). -1 会让我们从最后一刻开始 FName 第一次出现空格(从右到左)。
现在,我们可以使用 CAST(.. AS UNSIGNED) 将数字子字符串转换为整数。
使用 Replace() 函数 Trim() ,以获取基名称(不带数字后缀的字符串)。
现在,只是 Order By 首先是基本名称,然后是后缀号(“序列号”)
尝试以下查询(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

相关问题