検索結果をランダムにしたいが、件数が多いためページ分割が必要だっていうケースがあった。
全件をランダムで取得するのは簡単。
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 件のコメント:
コメントを投稿