MySQLでランダムな数字を得る方法

あるテーブルからランダムなIDを得るということなら、

ORDER BY rand()

で、簡単にできますが、今回は関数だけでランダムな値を得るというお話です。
(ランダムな値を得る関数があるのかもしれないです。)

RAND()

で、0から1の間のランダムな浮動小数点数が得られる(32bitCPUで小数点以下16桁)。
0.2053895940999183

REVERSE( RAND() )

で、文字の並びを逆順にした数字が得られる。
3819990495983502.0

FLOOR( REVERSE( RAND() ) )

で、小数部分を取り除く。
3819990495983502

FLOOR( REVERSE( RAND() ) ) %10

割った余りを得ることで、得られる値の範囲を絞ることができます。
2

割った余りで得られる値は、0から(割る数 - 1)になるので、例えば 5 から500までの間の数を得たい場合には

FLOOR( REVERSE( RAND() ) ) %(500 - 5 + 1) + 5

とします。
115

ただ範囲を大きくすると偏りが出てしまうようです。


ごく単純な方法では、ランダムに得たい値をキーとしたテーブルをつくり、

SELECT `id` FROM `for_random` ORDER BY rand() LIMIT 1;

としてしまうことできる。

スポンサーリンク

関連記事

スポンサーリンク

Symfony PropelでのMySQLの設定方法

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る