問題
SET @user_variable = FLOOR(RAND()*10);
INSERT INTO Table_name (columns_name) VALUES (1) FROM Table_name ORDER BY RAND() LIMIT 1 OFFSET @user_variable;
これはランダムに行を入れ替えたテーブルの上から@user_variable番目の行のcolumns_nameに1を入れることをしたかった。しかし、うまくいかなかった。その原因はLIMITやOFFSETは後ろにユーザー変数を持ってこれないことにあった。
解決法
次のようにするとうまくいく。
SET @user_variable = FLOOR(RAND()*10);
PREPARE SET_STMT FROM 'INSERT INTO Table_name (columns_name) VALUES (1) FROM Table_name ORDER BY RAND() LIMIT 1 OFFSET ?;';
EXECUTE SET_STMT USING @user_variable;
結論、やりたい操作を''で囲って上のようなことを書けばLIMITでもOFFSETでもうまくいく。
Reference
http://techtipshoge.blogspot.com/2011/10/limit.html
コメント
コメントを投稿