1

我有一个实体属性模型,用于存储与用户相关的信息。然后,我还尝试对仅包含按降序排列的数字的特定实体进行排序。我正在运行如下查询:

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)

4

1 回答 1

1

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

您可以在订购时投射它:

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

或者对于有符号整数:

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

另请参阅:强制转换函数和运算符

于 2012-05-16T02:12:31.923 回答