2016.
06.
01
23:29:23
結論から書くと
のように「RAND()」の中に数字を入れると
同じ数字を入れる限りは同じ結果が取得できるので、
あとは、その結果に対して、ページング処理を行えばOKです。
例えば
と
を実行すると
の結果を2ページに分けて取得できます。
それでは、詳細を書いていきます。
ランダムに取得した結果に対してページング処理を行いたかったのです。
ところがどっこい
のような形で実行すると、そもそもの並びが1回目と2回目で違うので、
ページング処理になりません。
どうすれば、いーの(--?と疑問を覚えたのが今回のきっかけです。
ほんで、あれやこれやと調べて
のように「RAND()」の中に数字を入れれば良いと分かりました。
数字が同じだったら、並びも同じになるようです。
よって、1ページ目を取得するときは
1.プログラム内で乱数を取得
2.「1.」で取得した乱数を「RAND()」に入れてSQL実行
3.「2.」で「RAND()」に入れた値をセッションに入れる
としておき、違うページに移るときは
4.「3.」でセッションに入れた値を取得
5.「4.」で取得した乱数を「RAND()」に入れてLIMIT句を変えたSQL実行
とすることで、ランダムで取得したレコードのページング処理ができました。
そんな感じ\(--)/
SELECT * FROM tbl1 ORDER BY RAND(1);
のように「RAND()」の中に数字を入れると
同じ数字を入れる限りは同じ結果が取得できるので、
あとは、その結果に対して、ページング処理を行えばOKです。
例えば
SELECT * FROM tbl1 ORDER BY RAND(1) LIMIT 0,10;
と
SELECT * FROM tbl1 ORDER BY RAND(1) LIMIT 10,10;
を実行すると
SELECT * FROM tbl1 ORDER BY RAND(1) LIMIT 0,20;
の結果を2ページに分けて取得できます。
それでは、詳細を書いていきます。
ランダムに取得した結果に対してページング処理を行いたかったのです。
ところがどっこい
SELECT * FROM tbl1 ORDER BY RAND() LIMIT 0,10;
SELECT * FROM tbl1 ORDER BY RAND() LIMIT 10,10;
のような形で実行すると、そもそもの並びが1回目と2回目で違うので、
ページング処理になりません。
どうすれば、いーの(--?と疑問を覚えたのが今回のきっかけです。
ほんで、あれやこれやと調べて
SELECT * FROM tbl1 ORDER BY RAND(1) LIMIT 0,10;
SELECT * FROM tbl1 ORDER BY RAND(1) LIMIT 10,10;
のように「RAND()」の中に数字を入れれば良いと分かりました。
数字が同じだったら、並びも同じになるようです。
よって、1ページ目を取得するときは
1.プログラム内で乱数を取得
2.「1.」で取得した乱数を「RAND()」に入れてSQL実行
3.「2.」で「RAND()」に入れた値をセッションに入れる
としておき、違うページに移るときは
4.「3.」でセッションに入れた値を取得
5.「4.」で取得した乱数を「RAND()」に入れてLIMIT句を変えたSQL実行
とすることで、ランダムで取得したレコードのページング処理ができました。
そんな感じ\(--)/