MySQL - IN() 内の値を ORDER BY する 質問する

MySQL - IN() 内の値を ORDER BY する 質問する

次のクエリで返されるアイテムを並べ替えたいのですがIN()関数に入力される順序

入力:

SELECT id, name FROM mytable WHERE name IN ('B', 'A', 'D', 'E', 'C');

出力:

|   id   |   name  |
^--------^---------^
|   5    |   B     |
|   6    |   B     |
|   1    |   D     |
|   15   |   E     |
|   17   |   E     |
|   9    |   C     |
|   18   |   C     |

何か案は?

ベストアンサー1

SELECT id, name
FROM mytable
WHERE name IN ('B', 'A', 'D', 'E', 'C')
ORDER BY FIELD(name, 'B', 'A', 'D', 'E', 'C')

分野関数は、残りの文字列リスト内の最初の文字列の位置を返します。

ただし、並べ替え順序を表すインデックス付きの列を用意し、この列で並べ替える方がパフォーマンス的にははるかに優れています。

おすすめ記事