MySQLのrandで質問です。

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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/08/25 16:00:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:holoholobird No.1

回答回数574ベストアンサー獲得回数104

ポイント34pt

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

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

id:makocan

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

2013/08/18 20:51:51
id:fowling-piece No.2

回答回数37ベストアンサー獲得回数8

ポイント33pt

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

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

UPDATE TableName SET ColumnName = RAND();

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

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

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

2013/08/18 20:51:34
id:dawakaki No.3

回答回数797ベストアンサー獲得回数122

ポイント33pt

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

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

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

2013/08/20 21:43:15

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません