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

動的配列を活用したMySQLのLIKEクエリ実装方法を解説

動的配列に対するLIKEクエリの基本構文

MySQLでカンマ区切りの複数値(いわゆる動的な配列)が格納されたカラムに対してLIKEクエリを実行したい場合、LIKE句とワイルドカード「%」を組み合わせることで部分一致検索が可能です。基本となる構文は以下の通りです。

select *from yourTableName
    where yourColumnName2 like "%yourValue%"
    order by yourColumnName1 asc
    limit yourLimitValue;

この構文では、yourTableNameに対象テーブル名、yourColumnName2に検索対象のカラム名を指定し、order by句で並べ替え、limit句で取得件数を制限します。

サンプルテーブルの作成

まずは動作確認用のテーブルを作成しましょう。

mysql> create table demo74
    -> (
    -> user_id int not null auto_increment primary key,
    -> user_names varchar(250)
    -> )
    ->;
Query OK, 0 rows affected (0.67 sec)

このテーブルは、自動採番されるuser_idを主キーとし、ユーザー名を格納するuser_namesカラムを持っています。

レコードの挿入

続いて、INSERTコマンドを使ってテーブルにデータを登録します。今回はカンマ区切りで複数の名前を1つのフィールドに格納しています。

mysql> insert into demo74(user_names) values("John Smith1,John Smith2,John Smith3");
Query OK, 1 row affected (0.18 sec)

mysql> insert into demo74(user_names) values("John Smith1");
Query OK, 1 row affected (0.15 sec)

mysql> insert into demo74(user_names) values("David Smith1");
Query OK, 1 row affected (0.12 sec)

mysql> insert into demo74(user_names) values("John Smith1,John Smith2,John Smith3,John Smith4");
Query OK, 1 row affected (0.10 sec)

登録データの確認

SELECT文でテーブルの中身を確認してみましょう。

mysql> select *from demo74;

上記クエリを実行すると、次のような結果が出力されます。

+---------+-------------------------------------------------+
| user_id | user_names                       |
+---------+-------------------------------------------------+
|       1 | John Smith1,John Smith2,John Smith3        |
|       2 | John Smith1                       |
|       3 | David Smith1                      |
|       4 | John Smith1,John Smith2,John Smith3,John Smith4 |
+---------+-------------------------------------------------+

動的配列に対するLIKEクエリの実行例

それでは本題です。「John Smith1」という値で部分一致検索を行うLIKEクエリを実行します。

mysql> select *from demo74
-> where user_names like "%John Smith1%"
-> order by user_id asc
-> limit 100;

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

+---------+-------------------------------------------------+
| user_id | user_names                       |
+---------+-------------------------------------------------+
|       1 | John Smith1,John Smith2,John Smith3        |
|       2 | John Smith1                       |
|       4 | John Smith1,John Smith2,John Smith3,John Smith4 |
+---------+-------------------------------------------------+
3 rows in set (0.00 sec)

結果の解説

出力を見ると、"%John Smith1%"というパターンに一致するレコードのみが抽出されています。

  • user_id = 1:「John Smith1」が先頭に含まれるため一致
  • user_id = 2:「John Smith1」と完全一致するため一致
  • user_id = 3:「David Smith1」は該当しないため除外
  • user_id = 4:「John Smith1」が先頭に含まれるため一致

ワイルドカード「%」を前後に付けることで、カラム内の任意の位置に検索値が含まれるレコードを柔軟に取得できます。さらにorder by user_id ascでIDの昇順に並べ替え、limit 100により最大100件に取得件数を制限しています。

実務上の注意点

カンマ区切りの文字列を1つのカラムに保存する設計は、データベースの正規化の観点からは推奨されません。実務では別テーブルへの分割や、JSON型カラム、FIND_IN_SET関数などの活用も検討するとよいでしょう。また、先頭に「%」を付けたLIKE検索はインデックスを利用できず、大規模なデータセットではパフォーマンス低下につながる点にも注意が必要です。

  1. MySQLでSELECTクエリを使用してデータを挿入(INSERT)する方法

    MySQLでは、INSERT文とSELECTクエリを組み合わせることで、テーブルにデータを挿入することができます。通常、SELECTは既存のテーブルからデータを取得するために使われますが、値を直接指定してINSERTを実行する際にも活用できる便利な手法です。基本構文SELECTクエリを使用してINSERTを実行する場合の構文は以下の通りです。insert into yourTableName(yourColumnName1,yourColumnName2,yourColumnName3,...N) select yourValue1,yourValue2,yourValue3,......N;

  2. MySQLでLIKEをIN()のように実装するクエリの書き方

    MySQLのIN()のような動作を実現するには、LIKE演算子と組み合わせてCOUNT()関数やIF()関数を使用します。この記事では、具体的な手順をサンプルコード付きで解説します。テーブルの作成まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable    -> (    -> Subject varchar(80)    -> );Query OK, 0 rows affected (0.58 sec)