2011/04/13

MySQL ランダムでレコードを取得しながらページング

検索結果をランダムにしたいが、件数が多いためページ分割が必要だっていうケースがあった。


全件をランダムで取得するのは簡単。
ORDER BY RAND()
で終わり。でも、ページを分けるとなるとページを移動するごとに結果がランダムになってしまう。
それだと最後のページまで見ても1回も出てこないレコードや何度も出てくるレコードが存在してしまう。

そういう時はランダムかつ固定
ORDER BY RAND(n);

これでランダムになるんだけど、nの値によって同じ結果になる。わかりづらいね 
1: ORDER BY RAND(1);
2: ORDER BY RAND(1);
上の2つは同じ結果が返ってくる。

3: ORDER BY RAND(2);
だと上の2つとは違う結果。

もっかい
4: ORDER BY RAND(2);
で取得すると上の3番目の結果と同じ結果になる。

セッションにRANDに入れる値を保存して、同じセッションの間は同じ結果が出るようにした。

個人的にはランダムで結果が変わるのは好きじゃないけどね。

参考:http://dev.mysql.com/doc/refman/5.1/ja/mathematical-functions.html

0 件のコメント:

コメントを投稿