2012-04-07 33 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