MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで結果セットを指定した順序どおりに取得する方法

MySQLでIN句を使ってレコードを取得すると、通常はテーブル内の格納順どおりに結果が返されます。しかし、「指定した値の並び順どおりに結果セットを取得したい」というケースもあります。そんなときは、FIND_IN_SET()関数とORDER BY句を組み合わせることで簡単に実現できます。

サンプルテーブルを作成する

まず、動作確認用のテーブルを作成します。

mysql> create table DemoTable1563
-> (
-> StudentId int,
-> StudentName varchar(20)
-> );
Query OK, 0 rows affected (0.52 sec)

レコードを挿入する

INSERTコマンドを使って、いくつかのレコードを登録します。

mysql> insert into DemoTable1563 values(1001,'Chris');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1563 values(1010,'Bob');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1563 values(1005,'Chris');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable1563 values(1015,'David');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1563 values(1030,'Mike');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1563 values(1020,'Sam');
Query OK, 1 row affected (0.14 sec)

テーブルの内容を確認する

SELECT文ですべてのレコードを表示してみましょう。

mysql> select * from DemoTable1563;

実行結果は以下のとおりです。

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 1001 | Chris |
| 1010 | Bob |
| 1005 | Chris |
| 1015 | David |
| 1030 | Mike |
| 1020 | Sam |
+-----------+-------------+
6 rows in set (0.00 sec)

指定した順序どおりに結果を取得するクエリ

ここからが本題です。FIND_IN_SET()を使うことで、指定したIDの順序(1001 → 1030 → 1010 → 1020)どおりに結果セットを並べ替えることができます。

mysql> select * from DemoTable1563
-> where StudentId IN(1001,1030,1010,1020)
-> order by find_in_set(StudentId,'1001,1030,1010,1020');

実行結果は以下のとおりです。

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 1001 | Chris |
| 1030 | Mike |
| 1010 | Bob |
| 1020 | Sam |
+-----------+-------------+
4 rows in set (0.00 sec)

仕組みの解説

FIND_IN_SET(値, 文字列リスト)は、カンマ区切りの文字列リストの中で、その値が何番目に登場するかを返す関数です(見つからない場合は0を返します)。この戻り値をORDER BYに渡すことで、リスト内での位置を基準にレコードをソートできます。

つまり、WHERE句のINで対象レコードを絞り込み、ORDER BY FIND_IN_SET()で並び順を制御するという二段構えにより、結果セットを思い通りの順序で取得できるわけです。表示順を任意に制御したい場面,たとえばカテゴリの優先順位や特定商品のピン留め表示など,で非常に役立つテクニックなので、ぜひ覚えておきましょう。

  1. JavaでMySQL接続を確立する方法とは?localhostのポート番号をわかりやすく解説

    JavaからMySQLデータベースに接続するには、JDBC URLに正しいポート番号を指定する必要があります。MySQLのデフォルトポート番号は3306であり、URLは以下の形式で記述します。jdbc:mysql://localhost:3306ポート番号3306について3306は、MySQLサーバーが標準で使用するポート番号です。ローカル環境(localhost)で稼働しているMySQLに接続する場合も、このポート番号を明示的に指定します。なお、設定ファイル(my.cnf や my.ini)でポート番号を変更している場合は、実際の値に合わせてください。サンプルコードimport java.s

  2. MySQLでクエリの実行結果を変数に代入する方法をわかりやすく解説

    MySQLでクエリ結果を変数に代入する基本MySQLでは、@変数名 の形式でユーザー定義変数を使用することで、クエリの実行結果を変数に格納できます。代入には :=(代入演算子)を使い、SELECT文の中で直接値を取得するのが一般的な方法です。この記事では、実際にテーブルを作成し、クエリ結果を変数に代入するまでの一連の手順をサンプルコード付きで紹介します。1. サンプルテーブルを作成するまず、以下のようにCREATE TABLE文でテーブルを作成します。mysql> create table DemoTable1864 ( Id int, FirstName var