SELECT * FROM `member` ORDER BY `posts` DESC LIMIT 5
我有这个小片段,它应该按照用户所拥有的帖子数量对列表进行排序。
出于某种原因,有4个帖子的用户来自有24个帖子的用户。是因为它只根据第一个数字吗?我该如何解决这个问题?
posts
是包含数字的varchar
列。
我在数据库中有7个用户进行测试,一个有24个帖子,一个有21个帖子,一个有4个帖子,四个有0个帖子。它将它分类4> 24> 21> 0> 0
答案 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