ORDER BY number_column:为什么较小的数字排在较大的数字前面


ORDER BY number_column DESC: why does a smaller number come before a larger?

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

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

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

posts是包含数字的varchar列。

我在数据库中有7个用户用于测试,一个有24个帖子,一个有21个帖子,一个有4个帖子,四个有0个帖子。排序为4> 24> 21> 0> 0

看来你的posts字段是一个字符串。

那么,试着这样做,把它当作一个整数来排序。

 ORDER BY CAST(posts AS INTEGER) DESC

应该得到正确的排序。

当然,正如@Jens指出的,您可能更聪明的做法是修复列定义。

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

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

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

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