如何按字母和数字排序MySQL查询,将100排序为高于010


How would I order a MySQL query by letter and number, sorting 100 as higer than 010?

我们的产品代码如下:

  • 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

的回报:

  1. AGE010
  2. AGE025
  3. AGE050
  4. AGE100
  5. 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');