MySQL の ORDER BY で指定した順番に並び替える(並び順を明示する)

MySQL

ずっとドラフト入りっぱなしだった…orz
FIELD を使用すると指定した順番でデータが取得できます。

ORDER BY FIELD(id, 3, 5, 1, 2, 4) ASC|DESC

たとえばこんなデータで試すと…

CREATE TABLE unchicchi ( id INT(1) );
INSERT INTO unchicchi ( id ) VALUES ( 1 ), ( 2 ), ( 3 ), ( 4 ), ( 5 );

[[MORE]]

普通に取得する
SELECT id FROM unchicchi;

+----+
| id |
+----+
|  1 |
+----+
|  2 |
+----+
|  3 |
+----+
|  4 |
+----+
|  5 |
+----+

指定した並び順で取得する
SELECT id FROM unchicchi ORDER BY FIELD(id, 3, 5, 1, 2, 4);

+----+
| id |
+----+
|  3 |
+----+
|  5 |
+----+
|  1 |
+----+
|  2 |
+----+
|  4 |
+----+

指定した並び順から降順で取得する
SELECT id FROM unchicchi ORDER BY FIELD(id, 3, 5, 1, 2, 4) DESC;

+----+
| id |
+----+
|  4 |
+----+
|  2 |
+----+
|  1 |
+----+
|  5 |
+----+
|  3 |
+----+

参考

MySQL おすすめ書籍

MySQL おすすめ書籍#1 MySQL おすすめ書籍#2