如何在MYSQL中按名称订购,与窗口中的订单名称一样

时间:2010-10-21 16:58:37

标签: sql mysql natural-sort

表 行的图片有名称

1.jpg,2.jpg,3.jpg,4.jpg,5.jpg,6.jpg,7.jpg,8.jpg,9.jpg,10.jpg,11.jpg
select * from Picture order by name

mysql顺序:1.jpg,10.jpg,11.jpg,2.jpg,3.jpg,......

问题:

我希望它像使用Window 1.jpg,2.jpg,3.jpg,4.jpg,5.jpg,6.jpg,7.jpg,8.jpg,9.jpg,10.jpg,11.jpg

一样对所有类型名称进行排序

并且必须与其他案例合作

flower01.jpg,flower02.jpg,flower031.jpg,....,flower10.jpg

请帮帮我

3 个答案:

答案 0 :(得分:2)

你基本上有4个选择。

  1. 将名称更改为数字类型,然后删除.jpg(稍后在代码中添加)
  2. 添加“订单”列并按该
  3. 排序
  4. 在代码中排序,而不是在SQL
  5. 使用演员'黑客'(例如CAST(NAME AS UNSIGNED)

答案 1 :(得分:1)

这是一种做法的黑客方式:

... ORDER BY CAST(name AS UNSIGNED);

修改:另一种选择是:

 ... ORDER BY LPAD(name,N,'0');

N是列的最大宽度。 遗憾的是,MySQL不支持原生AFAIK的自然排序。

答案 2 :(得分:0)

ODER BY name看到name是一个字符串,并按字符对其进行相应的排序。你必须让MySQL将名称解释为数值。一种方式可能是这样的:

select * from Picture order by name * 1;