IN() 関数内での MySQL の順序付け
IN() 句を使用してクエリを実行する場合、関数で提供された順序に基づいて項目が返されました。デフォルトでは、MySQL はこの順序を保証しません。
次の例を考えてみましょう:
SELECT id, name FROM mytable WHERE name IN ('B', 'A', 'D', 'E', 'C');
期待される出力は、値が IN() 関数に入力された順序でソートされる可能性があります。
id | name |
---|---|
5 | B |
6 | B |
1 | D |
15 | E |
17 | E |
9 | C |
18 | C |
代わりに、MySQL は独自の並べ替えアルゴリズムを適用する場合があり、その結果、順序が異なる可能性があります。
解決策:
希望の順序に合わせて、MySQL には FIELD() 関数が用意されています。この関数は、文字列と一連の文字列を受け取り、後続の引数内の最初の文字列の位置を返します。
FIELD() を利用すると、次のように出力を並べ替えることができます:
SELECT id, name FROM mytable WHERE name IN ('B', 'A', 'D', 'E', 'C') ORDER BY FIELD(name, 'B', 'A', 'D', 'E', 'C')
このクエリは、行が IN() 関数内で指定された順序で返されることを保証します。
パフォーマンスの最適化:
一方、FIELD() 関数は必要な機能を実現するには、パフォーマンスへの影響を考慮することが重要です。大規模なデータセットの場合、並べ替え専用に設計されたインデックス付き列を利用すると、パフォーマンスが大幅に向上します。
以上がMySQL IN() 関数で結果の順序を制御するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。