我有一个实体属性模型,用于存储与用户相关的信息。然后我也尝试对一个特定的实体进行排序,该实体只包含递减顺序的数字。我正在运行如下查询:
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.它可能有用,但key
和value
属性都是varchar(250)
,如果它影响MySQL使用的排序算法。
答案 0 :(得分:1)
当您的列为CHAR
类型时会发生这种情况。它比较字符串而不是数字。
您可以在订购时进行投射:
ORDER BY CAST(`user_meta`.`value` AS UNSIGNED)
或者对于有符号整数:
ORDER BY CAST(`user_meta`.`value` AS SIGNED)