我们的产品代码如下:
- AGE100 (代表1.00盎司年龄)
- AGE050 (代表年龄0.50盎司)
- AGE025 (代表AGE 0.25盎司)
- AGE010 (代表AGE 0.10盎司)
等等。我希望数据库首先返回字母,然后返回最后的数字代码,这样KR100将低于AGE050。
当前查询,
SELECT * FROM 'prices' ORDER BY 'code' ASC LIMIT 0 , 30
的回报:
- AGE010
- AGE025
- AGE050
- AGE100
- KR100
我如何使它正确排序代码中的数字?
按数字部分降序排序:
SELECT * FROM 'prices' ORDER BY SUBSTRING('code', -3) DESC
和前两个字符
SELECT * FROM 'prices' ORDER BY SUBSTRING('code', 1,2) ASC
那么这应该会给你一个类似的东西:
SELECT * FROM 'prices' ORDER BY SUBSTRING('code', 1,2) ASC, SUBSTRING('code', -3) DESC
要将项目按特定顺序放置,您可以使用数据库中的sortby
列,您可以更改该列以精细地调整应将行拉出的顺序。
SELECT * FROM 'prices' ORDER BY 'code' ASC LIMIT 0 , 30
将成为
SELECT * FROM 'prices' ORDER BY 'sortby' ASC LIMIT 0 , 30
该字段将是一个INT类型,这样更容易获得所需的顺序。
由于natsort()
不能与多维数组一起工作,您可以尝试:
uksort($array, 'strnatcasecmp');