MySQL的订单对我说谎

时间:2012-04-07 09:11:02

标签: mysql sql-order-by

是的,这是一个非常奇怪的问题,我想知道我将如何简洁地解释它。

我有一个WP插件,可以在mysql表中记录行,如下所示:

meta_id    post_id    meta_key    meta_value 
65387      605        _likes      9 

然后在我的一个页面上,我正在运行查询以选择最喜欢的帖子,即。按meta_value DESC排序。现在我在我的网站上发现,每当帖子达到10时,它就不再显示为顶部,并从查询结果中消失。奇

我去了meta_value订购的数据库和(在PHPMyAdmin中)并且它确实返回9作为最高结果,没有10个出现!?

我认为可能有一件事是字段类型(meta_value),这些是设置:

#   Column      Type        Collation           Attributes  Null    Default
4   meta_value  longtext    latin1_swedish_ci               Yes     NULL    

任何人都可以想到任何可能意味着当值为10或更高时ORDER BY无效!

由于

2 个答案:

答案 0 :(得分:2)

如果您无法更改列数据类型,请不要担心......不需要这样做

您需要在cast子句中仅用ORDER BY整数值。

用户技巧:

ORDER BY meta_value+0;

OR

ORDER BY CAST(meta_value as SIGNED);

答案 1 :(得分:1)

文本字段不像数字字段那样排序。下降时(文本术语)中的10是高于10的值,因为10以1开始,并且它是1,它正在处理,而不是整数,所以9出现在10之前。