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

MySQLで誤入力(タイポ)を許容して文字列を検索する方法|SOUNDS LIKE演算子の使い方

ユーザーが誤って「deom」(正しくは「demo」)や「samsumg」(正しくは「samsung」)のように入力してしまった場合でも、目的の文字列を検索できると便利です。MySQLでは、SOUNDS LIKE 演算子を使うことで、このようなスペルの揺れ(タイポ)を許容したあいまい検索が可能になります。

サンプルテーブルの作成

まず、検索対象となるテーブルを作成します。

mysql> create table DemoTable
    -> (
    -> Name varchar(20)
    -> );
Query OK, 0 rows affected (0.95 sec)

レコードの挿入

INSERTコマンドを使って、いくつかのレコードをテーブルに登録します。あえて似た綴りのデータ(「Johm」「SAMSUMG」など)も含めておきます。

mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable values('Adam');
Query OK, 1 row affected (0.33 sec)
mysql> insert into DemoTable values('Johm');
Query OK, 1 row affected (0.29 sec)
mysql> insert into DemoTable values('Carol');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('SAMSUNG');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('SAMSUMG');
Query OK, 1 row affected (0.13 sec)

テーブル内の全レコードを確認

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

mysql> select *from DemoTable;

実行すると、次のような結果が出力されます。

+---------+
| Name    |
+---------+
| John    |
| Adam    |
| Johm    |
| Carol   |
| SAMSUNG |
| SAMSUMG |
+---------+
6 rows in set (0.00 sec)

SOUNDS LIKEを使ったあいまい検索クエリ

ここからが本題です。「samsung」を「samsumg」と誤って入力したケースを想定し、SOUNDS LIKE演算子を使って検索します。

mysql> select *from DemoTable where Name SOUNDS LIKE 'samsung';

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

+---------+
| Name    |
+---------+
| SAMSUNG |
| SAMSUMG |
+---------+
2 rows in set (0.00 sec)

SOUNDS LIKEの仕組みと注意点

SOUNDS LIKEは、内部でSOUNDEX()関数を利用しています。SOUNDEXは文字列を「発音の似たグループ」に分類するアルゴリズムで、これにより「SAMSUNG」と「SAMSUMG」のように発音が近い単語を同一視できます。

ただし、SOUNDEXは英語の発音を前提として設計されているため、日本語などのマルチバイト文字列には適していません。また、発音が大きく異なる誤字(例:全く別の子音を持つケース)は検出できない場合があります。用途に応じて、LIKE句との併用や全文検索インデックス(FULLTEXT)との使い分けも検討するとよいでしょう。

  1. MySQLで末尾の文字列に基づいてレコードをソートする方法

    MySQLで文字列の末尾部分(例:「-D」や「-Smith」など)に基づいてレコードをソートしたい場合は、CASE式とORDER BY句を組み合わせることで実現できます。ここでは、実際のサンプルコードを使いながら、手順をわかりやすく解説します。 1. サンプルテーブルの作成 まずはデモ用のテーブルを作成します。顧客ID(ClientId)を自動採番の主キーとし、顧客名(ClientName)を格納するシンプルな構造です。 mysql> create table DemoTable -> ( -> ClientId int NOT NULL AUTO_INC

  2. MySQLデータベースで文字列を高速に検索するには?FULLTEXT検索の使い方を徹底解説

    MySQLデータベース内の文字列を素早く検索したい場合、FULLTEXT(全文検索)インデックスを利用するのが最も効果的です。LIKE句による部分一致検索はレコード数が増えるほどパフォーマンスが低下しますが、FULLTEXTインデックスを作成しておけば、大量のデータからでも目的の文字列を高速に抽出できます。1. テーブルを作成するまず、検索対象となるテーブルを作成しましょう。ここでは「Title」というテキスト型カラムを持つシンプルなテーブルを用意します。mysql> create table DemoTable1554 -> ( -> Title text