2012-05-16 27 views
1

我有一個實體屬性模型用於存儲與用戶相關的信息。然後,我也試圖對僅包含數字的特定實體進行降序排序。我運行一個查詢,如以下情況:EAV中的MySQL排序錯誤表

SELECT * FROM `user_meta` WHERE `key` = 'children' ORDER BY `user_meta`.`value` DESC 

我沒有直到最近,當用戶有11 children與此查詢碰到的問題,現在看結果如下

+-----+----------+-------+ 
| uid | key  | value | 
+-----+----------+-------+ 
| 1 | children | 5  | 
| 1 | children | 3  | 
| 1 | children | 3  | 
| 1 | children | 2  | 
| 1 | children | 11 | 
| 1 | children | 1  | 
+-----+----------+-------+ 

我有嘗試了對這個查詢的各種不同的修改,但沒有發現修復這個排名問題的東西,其中5> 11.它可能是有用的,但如果這影響了MySQL使用的排序算法,則keyvalue屬性是varchar(250)

回答

1

如果您的列是CHAR類型,則會發生這種情況。它比較字符串而不是數字。

訂貨時,你可以將它轉換:

ORDER BY CAST(`user_meta`.`value` AS UNSIGNED) 

或者符號整數:

ORDER BY CAST(`user_meta`.`value` AS SIGNED) 

參見:Cast Functions and Operators