MySQL の ORDER BY で指定した順番に並び替える(並び順を明示する)
ずっとドラフト入りっぱなしだった…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 |
+----+