シードパラメータをRAND()
に渡すことができるため 関数を使用すると、最初のページの前にシードを生成することで、ランダムな結果を「ページ分割」できます。
サンプルコード:最初のページの場合(言語によって異なります):
int seed = Math.abs(new Random().nextInt());
SQLクエリ:
SELECT url FROM masterurls ORDER BY RAND({seed}) LIMIT 200;
シードをどこかに保存します(Webベースのアプリケーションの場合は、urlパラメーターまたはセッションを使用できます)。次のページの場合:
SELECT url FROM masterurls ORDER BY RAND({seed}) LIMIT 200 * {pageNumber}, 200;
注:RAND()
による並べ替え は重い操作であるため、URLのハッシュコードを使用してインデックス付きの列を保存してから、モジュールベースまたはその他のランダム関数を使用する方がよい場合があります。