SQL IN() 句の値で並べ替えます
複数の SELECT ステートメントと IN() 句を含むクエリを処理する場合、最初のクエリで値の順序を維持することが、後続のクエリで課題になる可能性があります。この問題は、ユーザーが最初のクエリから収集された所定の ID シーケンスに基づいて特定の情報を取得したい場合に発生します。
一般的に採用される解決策には、自動インクリメント フィールドを含む一時テーブルを作成し、それを 2 番目のクエリと結合することが含まれます。ただし、MySQL の FIELD() 関数を使用する、よりシンプルで効率的なオプションがあります。
FIELD() 関数は、2 番目の引数として値のリストを受け取り、最初の引数に一致する最初の値のインデックスを返します。 FIELD() 関数を 2 番目のクエリの ORDER BY 句に組み込むことで、IN() 句の値に基づいて結果の希望の順序を明示的に指定できます。
次の例を考えてみましょう:
<code class="language-sql">SELECT name, description, ... FROM ... WHERE id IN([ids, any order]) ORDER BY FIELD(id, [ids in order])</code>
このクエリでは、FIELD() 関数が id 列の値を [ids in order] パラメーターで指定された希望の順序に並べます。この手法を使用すると、一時テーブルや複雑なサブクエリを使用せずに、最初のクエリの値の順序を 2 番目のクエリで維持できます。このアプローチにより、コードが簡素化されるだけでなく、パフォーマンスも向上します。
以上がMySQL の IN() 句でサブクエリの値の順序を維持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。