ORDER BY number_column DESC:为什么较小的数字会出现在更大的数字之前?

时间:2014-07-23 18:34:36

标签: php mysql

SELECT * FROM `member` ORDER BY `posts` DESC LIMIT 5

我有这个小片段,它应该按照用户所拥有的帖子数量对列表进行排序。

出于某种原因,有4个帖子的用户来自有24个帖子的用户。是因为它只根据第一个数字吗?我该如何解决这个问题?

posts是包含数字的varchar列。

我在数据库中有7个用户进行测试,一个有24个帖子,一个有21个帖子,一个有4个帖子,四个有0个帖子。它将它分类4> 24> 21> 0> 0

3 个答案:

答案 0 :(得分:1)

您的posts字段似乎是一个字符串。

所以,试着这样做就像整数一样对它进行排序。

 ORDER BY CAST(posts AS INTEGER) DESC

应该获得正确的订购。

当然,正如@Jens指出的那样,你可能很聪明地修改了列定义。

答案 1 :(得分:0)

帖子是nummeric吗?如果是,则将其转换为整数CAST(posts AS INTEGER)

答案 2 :(得分:-2)

如果您的字段属于text类型,请尝试此操作。

SELECT * FROM `member` ORDER BY LENGTH(`posts`) DESC LIMIT 5 // it gives the length in bytes

OR

SELECT * FROM `member` ORDER BY LENGTH(`posts`) DESC LIMIT 5 // it count multi-byte characters