一度、MySQLのrandで検出したランダムの状態を保存しておきたいのですが、どのように保持してますでしょうか?
適当な引数値を指定すれば常に同じ値が出てきます。
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
RAND() 関数が返す値を DB に保存しておきたいということでしょうか。
例えば RAND() 関数が返す0~1をそのまま保存する場合。
UPDATE TableName SET ColumnName = RAND();
RAND() 関数を使って、1~100の値を保存する場合。
UPDATE TableName SET ColumnName = FLOOR(1 + RAND() * 100);
ちょっと説明が悪かったですね。
RANDは値ではなく、ORDERに使用しており、そのランダムで取得した並び順を保持しておきたいのです。
order by rand() で使っている rand は rand 関数の結果なので、以下のSQL分でレコードに保存することができます。
update テーブル名 set カラム名=rand();
これは、乱数字が保持されると思いますが、この値を保持しておけば、その際に、ランダムで取得したデータ郡を再度取得できるのでしょうか?
ちょっと説明が悪かったですね。
2013/08/18 20:51:51RANDは値ではなく、ORDERに使用しており、そのランダムで取得した並び順を保持しておきたいのです。