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

MySQLクエリで特定の名前を先頭に固定し、残りのレコードをランダムに表示する方法

MySQLでは、ORDER BY RAND()LIMITを組み合わせることで、特定のレコードを先頭に固定しつつ、残りのレコードをランダムな順序で表示できます。この記事では、その具体的な手順をサンプルコードとともに解説します。

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

まず、テーブルを作成しましょう。ここでは「DemoTable1426」というテーブルに、名前を格納するカラムを定義します。

mysql> create table DemoTable1426
   -> (
   -> FirstName varchar(20)
   -> );
Query OK, 0 rows affected (0.59 sec)

2. レコードの挿入

次に、INSERT文を使ってテーブルにいくつかのレコードを挿入します。

mysql> insert into DemoTable1426 values('John');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1426 values('Adam');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1426 values('Robert');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1426 values('David');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1426 values('Sam');
Query OK, 1 row affected (0.13 sec)

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

SELECT文を使って、テーブル内のすべてのレコードを表示してみましょう。

mysql> select * from DemoTable1426;

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

+-----------+
| FirstName |
+-----------+
| John      |
| Adam      |
| Robert    |
| David     |
| Sam       |
+-----------+
5 rows in set (0.00 sec)

4. 特定の名前を固定して残りをランダム表示するクエリ

ここが本題です。以下のクエリを実行すると、「Robert」という名前のレコードが常に先頭に表示され、それ以外のレコードはランダムな順序で3件だけ取得されます。

mysql> select * from DemoTable1426 order by (FirstName='Robert') desc,RAND()
   -> limit 3;

このクエリのポイントは、(FirstName='Robert')という条件式です。条件が真の場合は「1」、偽の場合は「0」を返すため、これを降順(DESC)でソートすると、条件に一致するレコードが必ず先頭に来ます。その後、RAND()によって残りのレコードがシャッフルされ、LIMIT 3により上位3件のみが表示されます。

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

+-----------+
| FirstName |
+-----------+
| Robert    |
| Adam      |
| David     |
+-----------+
3 rows in set (0.52 sec)

ご覧のとおり、「Robert」が常に最初に表示され、その他のレコード(Adam、Davidなど)は実行するたびに異なる順序でランダムに表示されます。この手法は、ピックアップ記事を目立たせたい場合や、広告枠を固定しつつ他のコンテンツをランダム表示したい場合などに応用できます。

  1. MySQLでNULLを含む列からNULL以外(NOT NULL)の値だけを抽出して表示する方法

    MySQLのIS NOT NULLを使ってNULL以外の値のみを表示するMySQLで、NULLとNULL以外のレコードが混在する列からNULL以外の値だけを取得したい場合は、IS NOT NULL演算子を使用します。この記事では、実際にテーブルを作成しながら手順を解説します。1. テーブルの作成まず、日付型の列を持つサンプルテーブルを作成します。mysql> create table DemoTable1      (      DueDate date      ); Query OK, 0 ro

  2. 【MySQL】特定の列の値を先頭に固定し、残りの行をランダム順で表示する方法

    MySQLで行をランダムに並べ替えるには RAND() 関数を使用しますが、さらに「特定の列の値だけは必ず先頭に固定して表示したい」という場合には、ORDER BY 句と組み合わせることで実現できます。この記事では、特定の値を持つ行を常に最上位に固定しつつ、それ以外の行をランダムな順序で表示する方法を、実際のSQL例とともに解説します。1. サンプルテーブルを作成するまず、数値を格納するシンプルなテーブルを作成します。mysql> create table DemoTable1921    (    Numb