MySQLのselectで任意の順番にソートする
MySQLで任意の順番にソートをするにはfieldを使う
| id | name |
| 1 | 一郎 |
| 2 | 二郎 |
| 3 | 三郎 |
| 4 | 四郎 |
| 5 | 五郎 |
| 6 | 六郎 |
| 7 | 七郎 |
| 8 | 八郎 |
| 9 | 九郎 |
というテーブルがあるとする。
select * from users;
とすれば、
| id |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
という一覧が返ってくる
select * from users order by field(id, 4,5,6);
とすると
| id |
| 1 |
| 2 |
| 3 |
| 7 |
| 8 |
| 9 |
| 4 |
| 5 |
| 6 |
という結果が返ってくる。
なぜか、fieldで指定していないIDが最初に表示され、最後にfieldで指定したレコードが順番に並ぶようだ。
希望としては
4,5,6が最初に表示されて、その後に1,2,3,7…と出てほしい。
これを実現するには
select * from users order by field(id, 6,5,4) desc, id;
とする

