我需要对MySQL结果使用自然排序,因为它当前按如下方式对我的INT值进行排序:
[等]
虽然我需要它像
那样排序我知道“natsort”函数,但它不适用于MySQL查询结果。我怎样才能(自然地)排序,是否可以在查询中执行此操作?
感谢您的帮助!
编辑:示例查询$result = mysql_query("SELECT * FROM forums ORDER BY 'posts' DESC;");
不完全确定我使用的DESC是否有效,但它不会抛出错误,所以它一定没问题。不幸的是,似乎将DESC改为ASC也没有效果......
答案 0 :(得分:2)
您在那里发布的查询是按常量字符串表达式排序,而不是列名称或位置。要么使用反引号来引用,要么取出引号:
SELECT * FROM forums ORDER BY `posts` DESC
或者
SELECT * FROM forums ORDER BY posts DESC
可以解释为什么在ASC和DESC之间进行更改无效。
初步答案是:
您描述的排序顺序表明INT值实际上存储为字符类型(或者可能在排序之前转换为字符)。
检查您是以数字还是字符类型存储数据。如果可能,请使用数字类型,然后自然排序顺序将根据您的需要。如果您无法将基础数据类型更改为INT,那么您可以在查询中执行此操作(例如,使用CAST),可能会以性能为代价。
答案 1 :(得分:1)
如果帖子是非INT列,您可以尝试:
SELECT * FROM forums ORDER BY CAST(`posts` AS INT) DESC
另请查看http://drupal.org/project/natsort。这是一个Drupal模块,可用于促进MySQL排序。
答案 2 :(得分:0)
This question有一个我用过的MySQL的答案。