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

MySQLストアドルーチンに配列を渡す方法【FIND_IN_SET活用】

MySQLには他のプログラミング言語のような配列型が存在しないため、ストアドルーチン(ストアドプロシージャ)に「配列」を渡したい場合は、カンマ区切りの文字列としてパラメータを受け取り、FIND_IN_SET()関数で照合するのが定番のテクニックです。ここでは、実際にサンプルテーブルとストアドプロシージャを作成しながら、その手順をわかりやすく解説します。

1. サンプルテーブルの作成

まず、例として使用するテーブル「FindDemo」を作成します。

mysql> create table FindDemo
   -> (
   -> name varchar(100)
   -> );
Query OK, 0 rows affected (0.46 sec)

2. テストデータの挿入

作成したテーブルにレコードを登録します。

mysql> insert into FindDemo values('John'),('Smith');
Query OK, 2 rows affected (0.13 sec)
Records: 2  Duplicates: 0  Warnings: 0

3. 登録データの確認

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

mysql> select *from FindDemo;

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

+-------+
| name  |
+-------+
| John  |
| Smith |
+-------+
2 rows in set (0.00 sec)

4. 配列を受け取るストアドプロシージャの作成

次に、カンマ区切りの文字列(配列の代わり)をパラメータとして受け取り、FIND_IN_SET()でテーブル内の値と照合するストアドプロシージャを作成します。

mysql> delimiter //
mysql>CREATE  PROCEDURE SearchingStoredProcedure(IN ArrayDemo VARCHAR(100))
   -> BEGIN
   ->     SELECT * FROM FindDemo
   ->     WHERE FIND_IN_SET(name, ArrayDemo);
   ->
   -> END//
Query OK, 0 rows affected (0.14 sec)

FIND_IN_SET(name, ArrayDemo)は、カンマ区切りの文字列「ArrayDemo」の中に、カラム「name」の値が含まれているかどうかを判定する関数です。含まれていれば該当行が返されます。

5. プロシージャの呼び出し(配列を渡す)

デリミタを元に戻し、カンマ区切りの値のリストを引数としてプロシージャを呼び出します。

mysql> delimiter ;
mysql> call SearchingStoredProcedure('David,Bob,John');

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

+------+
| name |
+------+
| John |
+------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

まとめ

渡したリスト「David, Bob, John」のうち、テーブルに存在する「John」だけが抽出されました。このように、MySQLで配列的な処理を行いたい場合は、カンマ区切りの文字列+FIND_IN_SET関数の組み合わせがシンプルで効果的です。なお、大量データを扱う場合や複雑な条件が必要な場合は、一時テーブルやJSON型を活用する方法も検討するとよいでしょう。

  1. C言語で配列を関数に渡す方法を解説!平均値計算のサンプルコード

    C言語において、配列を関数へ渡す方法を理解することは、効率的なプログラムを書くうえで非常に重要です。ここでは、配列の要素の平均値を計算するサンプルコードを通じて、その基本的な仕組みをわかりやすく解説します。 サンプルコード #include <stdio.h> float avg(float a[]) {     int i;     float avg, sum = 0.0;     for (i = 0; i < 6; ++i) {  &

  2. C#のメソッドに配列を引数として渡す方法を解説

    C#では、配列をそのままメソッドの引数として渡すことができます。本記事では、配列の宣言・初期化から、メソッドへの受け渡し、実際のサンプルコードと実行結果まで、順を追ってわかりやすく解説します。 1. 配列の宣言と初期化 まず、メソッドに渡すための配列を宣言し、初期化しておきましょう。ここでは、5つの要素を持つint型の配列を用意します。 MyArray app = new MyArray(); /* 5つの要素を持つint型配列 */ int[] balance = new int[]{1000, 2, 3, 17, 50}; 2. 配列を受け取るメソッドを定義する 次に、配列を引数として