1

我需要对 MySQL 结果使用自然排序,因为它当前对我的 INT 值进行如下排序:

  • 1
  • 123
  • 1256
  • 22
  • 231

[ETC]

虽然我需要它来排序

  • 1
  • 22
  • 231
  • 1256

我知道“natsort”函数,但它不适用于 MySQL 查询结果。我如何(自然地)排序,是否可以在查询中执行此操作?

谢谢您的帮助!

编辑:示例查询$result = mysql_query("SELECT * FROM forums ORDER BY 'posts' DESC;");

不完全确定我对 DESC 的使用是否有效,但它不会引发错误,所以它一定没问题。不幸的是,似乎将 DESC 更改为 ASC 也没有效果......

4

3 回答 3

2

您在那里发布的查询是按常量字符串表达式排序的,而不是列名或位置。要么使用反引号引用,要么去掉引号:

SELECT * FROM forums ORDER BY `posts` DESC

或者可能

SELECT * FROM forums ORDER BY posts DESC

将解释为什么 ASC 和 DESC 之间的更改没有效果。

最初的答案是:

您描述的排序顺序表明 INT 值实际上被存储为字符类型(或者可能在排序之前转换为字符)。

检查您是以数字还是字符类型存储数据。如果可能,请使用数字类型,那么自然排序顺序将符合您的要求。如果您不能将基础数据类型更改为 INT,那么您可以在查询中执行此操作(例如使用CAST),可能会以性能为代价。

于 2010-02-01T00:08:01.550 回答
1

如果帖子是非 INT 列,您可以试试这个:

SELECT * FROM forums ORDER BY CAST(`posts` AS INT) DESC

也看看http://drupal.org/project/natsort。这是一个 Drupal 模块,可用于促进 MySQL 排序。

于 2012-11-15T16:50:21.347 回答
0

这个问题有一个我用过的 MySQL 的答案。

于 2010-02-01T00:13:43.547 回答