MySQLのテーブルからランダムにデータを取り出す方法

こんにちは、さるまりんです。

MySQLのテーブルからランダムにひとつだけデータを取り出す必要がありました。

SQLだけで簡単に実現するためにこんな方法をとりました。

SELECT *
FROM my_table
ORDER BY RAND()
LIMIT 1;

上のSQLでやっていることは
1. 関数RAND()で全ての行に対してランダムな値を生成
2. ORDER BYはその生成された値の順に並べ
3. LIMIT 1で最初の1行だけをとる

です。

条件で特定のデータよりランダムに取るにはWHERE句で絞り込み、
取得するデータの数を変えるにはLIMIT 1を任意の数に変えることで実現できます。

実際にはこんな感じで使いました。

SELECT color_name, rgb_value
FROM colors
ORDER BY RAND()
LIMIT 1;

テーマカラーをランダムに決めるためにテーブルcolorsから色の名称と色のRGB値をひと組取得しています。

ただこの方法はテーブルのレコード数が多いと途方もなく遅くなってしまい実用的ではありません。

テーブルが大きくなっても速く動く方法はまた改めて考えてみたいと思います。

読んでくださってありがとうございました。

それではまた!