人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MySQLのrandで質問です。
一度、MySQLのrandで検出したランダムの状態を保存しておきたいのですが、どのように保持してますでしょうか?


●質問者: makocan
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● holoholobird
●34ポイント

適当な引数値を指定すれば常に同じ値が出てきます。

RAND(), RAND(N)

0 <= v < 1.0 の範囲にあるランダムな浮動小数点値 v を戻します。定数整数引数 N が指定されている場合は、カラム値の反復可能なシークエンスを生成するシード値として使用されます。

mysql> SELECT RAND();
-> 0.9233482386203
mysql> SELECT RAND(20);
-> 0.15888261251047
mysql> SELECT RAND(20);
-> 0.15888261251047
mysql> SELECT RAND();
-> 0.63553050033332
mysql> SELECT RAND();
-> 0.70100469486881
mysql> SELECT RAND(20);
-> 0.15888261251047

定数イニシャライザを使用すれば、シードは実行の前の、ステートメントがコンパイルされる際に一度初期化されます。MySQL 5.1.16 からは、非定数イニシャライザ ( カラム名など ) が引数として使用される場合は、シードは RAND() の各呼び出しの値で初期化されます。( これは、等価の引数値に対しては、RAND() は毎回同じ値を戻すということを示しています ) 。MySQL 5.1.3 から 5.1.15 では、非定数引数は許可されていません。それ以前では、非定数引数の使用の効果は未定義になっています。
http://dev.mysql.com/doc/refman/5.1/ja/mathematical-functions.html


makocanさんのコメント
ちょっと説明が悪かったですね。 RANDは値ではなく、ORDERに使用しており、そのランダムで取得した並び順を保持しておきたいのです。

2 ● SPANIEL
●33ポイント

RAND() 関数が返す値を DB に保存しておきたいということでしょうか。

例えば RAND() 関数が返す0?1をそのまま保存する場合。

UPDATE TableName SET ColumnName = RAND();

RAND() 関数を使って、1?100の値を保存する場合。

UPDATE TableName SET ColumnName = FLOOR(1 + RAND() * 100);

makocanさんのコメント
ちょっと説明が悪かったですね。 RANDは値ではなく、ORDERに使用しており、そのランダムで取得した並び順を保持しておきたいのです。

3 ● だわかき
●33ポイント

order by rand() で使っている rand は rand 関数の結果なので、以下のSQL分でレコードに保存することができます。

update テーブル名 set カラム名=rand();

makocanさんのコメント
これは、乱数字が保持されると思いますが、この値を保持しておけば、その際に、ランダムで取得したデータ郡を再度取得できるのでしょうか?
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ