概要:このチュートリアルでは、MySQL でデータベース テーブルからランダムなレコードを選択するさまざまなテクニックを学習します。

  • Widget “quote of the day” を表示するためにランダムに引用を選択する。
  • Gallery でランダムに画像を選択し、特集画像として使用する。
  • MySQL は ORDER BY RAND() を使ってランダムにレコードを選択する

    MySQL にはテーブルからランダム行を選択する組み込みステートメントはない。

    次のクエリは、データベース テーブルからランダムな行を選択します:

    Code language: SQL (Structured Query Language) (sql)

    クエリを詳しく調べてみましょう。

  • ORDER BY句は、RAND()関数が生成した乱数によってテーブルのすべての行をソートします。
  • LIMIT句は、ランダムにソートされた結果セットの最初の行をピックします。
  • データベーステーブルからNランダムレコードを選択したい場合、LIMIT句を次のように変更する必要があります:

    Code language: SQL (Structured Query Language) (sql)

    サンプルデータベースから次のcustomersテーブルをご覧ください。

    次の例では、customers テーブルから 5 つのランダムな顧客を選択します。

    Code language: SQL (Structured Query Language) (sql)

    Try It Out

    ランダムなので、異なる結果セットを取得できることに注意してください。 しかし、MySQL はランダムなものを選択するためにテーブル全体をソートしなければならないため、大きなテーブルでは遅くなります。

    クエリの速度は、テーブル内の行数にも依存します。 テーブルの行数が多ければ多いほど、各行の乱数を生成するのに時間がかかります。

    MySQL select random records using INNER JOIN clause

    This technique requires that the table has an auto increment primary key field and there is no gap in the sequence.

    次のクエリは、主キー列に基づいて乱数を生成します。

    Code language: SQL (Structured Query Language) (sql)

    上記のクエリが返す結果セットを使用して、次のようにテーブルを結合できます:

    Code language: SQL (Structured Query Language) (sql)

    この手法を使用すると、制限を増やすとクエリはランダムに選択した行から始まる連続行のみを取得するので、複数のランダム行を取得するにはクエリを複数回実行する必要があります。

    次のクエリは、customersテーブルからランダムな顧客を返します。

    Code language: SQL (Structured Query Language) (sql)

    Try It Out

    MySQL select random records using variables

    テーブルに id 列があり、値が範囲 1..N 内で、範囲に隙間がない場合、次の手法を使用できます:

    • 最初に、範囲 1 で乱数選択を行います。.N.
    • 次に、乱数に基づいてレコードを選択します。

    次のステートメントは、これを達成するのに役立ちます:

    Code language: SQL (Structured Query Language) (sql)

    ユーザー定義変数は、接続固有であることに注意してください。 これは、このテクニックがコネクションプーリングでは使用できないことを意味します。 さらに、主キーは整数型でなければならず、その値はギャップなしのシーケンスでなければなりません。

    このチュートリアルでは、テーブルからランダムにレコードを選択するいくつかのテクニックを紹介しました。

  • はい いいえ
  • このチュートリアルは役に立ちましたか。

    コメントを残す

    メールアドレスが公開されることはありません。