MySQL の "IN" クエリでのシーケンスの保持
MySQL では、"IN" 演算子は、提供されたリスト内の任意の値に一致するレコードを選択します。デフォルトでは、結果はデータベースの並べ替えアルゴリズムで定義された順序で返されますが、クエリで指定された順序と必ずしも一致するとは限りません。
次の例を考えてみましょう:
SELECT * FROM foo f WHERE f.id IN (2, 3, 1);
このクエリは、ID 2、3、1 を持つレコードを取得することを目的としています。ただし、結果は通常、ID 順に並べられます。 ascending:
+----+--------+ | id | name | +----+--------+ | 1 | first | | 2 | second | | 3 | third | +----+--------+
クエリで指定された順序を維持するには、結果を明示的に順序付ける必要があります。 ORDER BY FIELD() 関数はこれを実現できます。
SELECT * FROM foo f WHERE f.id IN (2, 3, 1) ORDER BY FIELD(f.id, 2, 3, 1);
FIELD() 関数は、最初の引数として値を受け取り、残りの引数として値のリストを受け取ります。リスト内の値の位置を返します。たとえば、FIELD(2, 2, 3, 1) は、2 がリストの最初の値であるため、1 を返します。
結果を FIELD(f.id, 2, 3, 1) で並べ替えることで、次のようになります。 MySQL に、まず最初の値 (2) でレコードを並べ替え、次に 2 番目の値 (3) で並べ替え、最後に 3 番目の値 (1) で並べ替えるよう指示します。このシーケンスにより、結果がクエリに表示されるのと同じ順序で返されることが保証されます。
+----+--------+ | id | name | +----+--------+ | 2 | second | | 3 | third | | 1 | first | +----+--------+
以上がMySQL の「IN」クエリで値の順序を保持する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。