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

MySQLのORDER BYでキーワードマッチを実行する方法

本記事では、MySQLにおいてORDER BY句とCASE式を組み合わせてキーワードマッチによる並べ替えを行う方法を、実際にテーブルを作成しながら解説します。

サンプルテーブルの作成

まず、CREATE TABLE文でテーブルを作成します。

mysql> create table DemoTable602 (GameName text);
Query OK, 0 rows affected (0.55 sec)

レコードの挿入

続いて、INSERT文を使ってテーブルにデータを追加していきます。

mysql> insert into DemoTable602 values('Candy cash game');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable602 values('Pubg');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable602 values('cash Candy game');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable602 values('subway');
Query OK, 1 row affected (0.14 sec)

登録済みデータの確認

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

mysql> select *from DemoTable602;

出力結果は次のとおりです。

+-----------------+
| GameName        |
+-----------------+
| Candy cash game |
| Pubg            |
| cash Candy game |
| subway          |
+-----------------+
4 rows in set (0.00 sec)

ORDER BYでキーワードマッチを実行するクエリ

特定のキーワードを含むレコードを優先的に表示したい場合は、ORDER BY句の中でCASE式とINSTR関数を組み合わせます。まずCASE式でキーワードを含まない行を後に回し、そのうえでINSTR関数の戻り値(キーワードの出現位置)を降順にソートすることで、キーワードが前方に出現するレコードほど上位に配置されます。

mysql> select *from DemoTable602
    order by
       CASE WHEN instr(GameName, 'Candy') = 0 then 1 else 0 end,
       instr(GameName, 'cash') desc;

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

+-----------------+
| GameName        |
+-----------------+
| Candy cash game |
| cash Candy game |
| Pubg            |
| subway          |
+-----------------+
4 rows in set (0.00 sec)

結果を見ると、「Candy」というキーワードを含む2件のレコードが上位に並び、さらに「cash」の出現位置が早い「Candy cash game」が先頭になっていることがわかります。一方、「Pubg」や「subway」のように該当するキーワードを含まないレコードは、CASE式によって自動的に末尾へ配置されています。

このように、ORDER BY句内でのCASE式と文字列検索関数の組み合わせを使えば、単純な昇順・降順ソートだけでは実現できない、キーワードの関連度に基づいた柔軟な並べ替えが可能になります。検索機能などで関連性の高い結果を上位に表示したいケースで特に役立つテクニックです。

  1. MySQLで最初の文字を基準にレコードを並べ替える方法(ORDER BY CASEの使い方)

    MySQLで最初の文字を基準に並べ替える方法MySQLでレコードを「最初の文字」を基準に並べ替えたい場合は、ORDER BY句とCASE式を組み合わせます。ここでは、LEFT関数で先頭の1文字を取得し、CASE式で条件分岐させることで、特定の文字で始まるレコードを優先的に表示する方法を解説します。1. サンプルテーブルの作成まず、並べ替えの動作を確認するためのテーブルを作成します。mysql> create table DemoTable1535 -> ( -> Value varchar(100) -> );Query OK, 0 rows affe

  2. MySQLでORDER BY FIELD()を使ったカスタムソートを実行する方法

    MySQLでカスタムソートを行うにはMySQLで独自の順序に従ってレコードを並び替えたい場合、ORDER BY FIELD() を使用します。FIELD()関数は、指定した値のリストの順番に基づいて各レコードの位置を返すため、任意の順序でのソートが可能になります。まず、テーブルを作成しましょう。mysql> create table DemoTable    -> (    -> Id int    -> ); Query OK, 0 rows affected (0.82 sec)サンプルデータの挿入INSE