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 に答える