ORDER BY
句の仕組みとFIELD()
機能の仕組みを理解しています。私が理解したいのは、両者がどのように連携してソートするかです。行の取得方法とソート順の導出方法
+----+---------+
| id | name |
+----+---------+
| 1 | stan |
| 2 | kyle |
| 3 | kenny |
| 4 | cartman |
+----+---------+
SELECT * FROM mytable WHERE id IN (3,2,1,4) ORDER BY FIELD(id,3,2,1,4)
上記のクエリの結果は
+----+---------+
| id | name |
+----+---------+
| 3 | kenny |
| 2 | kyle |
| 1 | stan |
| 4 | cartman |
+----+---------+
ORDER BY 3、2、1、4と言っているようなもの
質問
- これは内部的にどのように機能しますか?
- MySQLはどのようにして行を取得し、ソート順を計算しますか?
- MySQLはidカラムでソートする必要があることをどのように知っていますか?
SELECT *, FIELD(id,3,2,1,4) AS f FROM mytable WHERE id IN (3,2,1,4);
その後、ORDER BY f
またはORDER BY FIELD(id,3,2,1,4)
を追加してから再試行してください。