2012-04-07 29 views
1

对,这是一个很奇怪的问题,我想知道我将如何简洁地解释它。MySQL排序对我说谎

我有一个WP插件,记录行的MySQL表所示:

meta_id post_id meta_key meta_value 
65387  605  _likes  9 

然后在我的网页之一,我运行一个查询选择最喜欢的职位,即。 ORDER BY 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  

任何人都可以想到的任何可能意味着ORDER BY当值不工作10或以上!?

谢谢

+0

动听的名字! :-) – 2012-04-07 09:19:14

回答

2

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

您只需要cast它是整数中的值ORDER BY子句。

用户绝招:

ORDER BY meta_value+0; 

OR

ORDER BY CAST(meta_value as SIGNED); 
+0

是的。谢谢!有效 – benhowdle89 2012-04-07 09:28:52

1

文本字段不像数字字段那样排序。 9下降时的数值高于10(用文字表示),因为10从1开始,它是1而不是整数,所以9出现在10之前。

+0

Ohhhh。好。由于WordPress使用此字段为多个meta_value的我不能真正改变类型,有什么我可以做的吗? – benhowdle89 2012-04-07 09:15:02

+1

请参阅http://stackoverflow.com/questions/8557172/mysql-order-by-sorting-alphanumeric-correctly – GavinCattell 2012-04-07 09:16:56