1. ホーム
  2. mysql

[解決済み] MySQL - IN() 内の ORDER BY 値

2022-09-14 04:42:05

質問

次のクエリで返される項目を、次のような方法で並べ替えたいと思っています。 IN()関数に入力された順序で並べ替えたいのです。 .

INPUTです。

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

OUTPUTです。

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

何かアイデアはありますか?

どのように解決するのですか?

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

この フィールド 関数は、残りの文字列のリストにおける最初の文字列の位置を返します。

しかし、ソート順を表すインデックス付きのカラムを用意し、このカラムでソートする方がパフォーマンス的にずっと優れています。