ホームページ > データベース > mysql チュートリアル > MySQL の「IN」クエリで値の順序を保持する方法は?

MySQL の「IN」クエリで値の順序を保持する方法は?

Mary-Kate Olsen
リリース: 2024-12-26 08:39:13
オリジナル
768 人が閲覧しました

How to Preserve the Order of Values in a MySQL `IN` Query?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート