ランダムで取得してページング

2008/07/20 | MySQL

データをランダムな順番で取得するには以下のorder句をつければいいということは前に書いた。

order by rand()

これで確かにランダムな順番でデータを吐き出してくれるのだが、SQL実行毎に順番が変わってしまう(当たり前)。ページング処理を実行したい場合は、1ページ目と2ページ目を表示する際に、順番に(例えば)10件ずつデータを取ってくるわけだが、そもそも順番がめちゃくちゃなので、1ページ目のデータが2ページ目でまた出現してしまう、といったことが起きてしまう。どうすればよいか。解決策がコレ。

order by rand(n)
nは適当な数値

詳しくは調べていないがnは乱数を発生させる際のseed値のようなもの。このseed値が同じであれば、並び順は常に同じになるのだ。なのでデータ取得の一番最初のときにこのseed値を初期化して、以降のページングの際はこのseed値を持ちまわってSQL文に仕込んでやればよいということになる。

コメントを残す


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net