帰国したので「CA雑記帳」からタイトル変更 (TYO=東京)
こんな感じで当然文字列としてソートされます。mysql> SELECT id, value FROM test ORDER BY value;
id value 2 1 1 10 4 2 5 3 3 5
CASTを使わずに ORDER BY に +0 を加えるだけでも数値としてソートされます。mysql> SELECT id, value FROM test ORDER BY CAST(value AS signed);
id value 2 1 4 2 5 3 3 5 1 10
mysql> SELECT id, value FROM test ORDER BY value + 0;
id value 2 1 4 2 5 3 3 5 1 10
上記のようなテーブルをpriorityカラムでソートすると、
id priority 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1
暗黙の了解でpriorityとidによってソートされるんですが、レコード数が10個以上になると突然その法則が崩れてしまいます。。mysql> SELECT * FROM test ORDER BY priority;
id priority 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1
これを回避するには ORDER BY priority, id というように id を明示しなければなりません。mysql> SELECT * FROM test ORDER BY priority;
id priority 1 1 9 1 8 1 7 1 6 1 5 1 4 1 3 1 2 1 10 1
mysql> SELECT * FROM test ORDER BY priority, id;
id priority 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 1
コメントの投稿