这是我的查询
$sql=executeQuery("select * from ".PREFIX."frame_info
where Id='".$Id."' $where_clause
order by left(FName, 2), substr(FName, 3) + 0, FName");
PS。我尝试了以下方法,但没有任何作用
以下是示例数据:
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
答案 0 :(得分:1)
' '
)。 -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