EAV表中的MySQL排序错误

时间:2012-05-16 02:07:58

标签: 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.它可能有用,但keyvalue属性都是varchar(250),如果它影响MySQL使用的排序算法。

1 个答案:

答案 0 :(得分:1)

当您的列为CHAR类型时会发生这种情况。它比较字符串而不是数字。

您可以在订购时进行投射:

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

或者对于有符号整数:

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

另请参阅:Cast Functions and Operators