Puisque vous pouvez passer un paramètre de départ au RAND()
fonction, vous pouvez "paginer" les résultats aléatoires en générant une graine avant la première page.
Exemple de code :Pour la première page (varie selon la langue) :
int seed = Math.abs(new Random().nextInt());
Requête SQL :
SELECT url FROM masterurls ORDER BY RAND({seed}) LIMIT 200;
Stockez la graine quelque part (pour les applications Web, vous pouvez utiliser un paramètre d'url ou une session). Pour les pages suivantes :
SELECT url FROM masterurls ORDER BY RAND({seed}) LIMIT 200 * {pageNumber}, 200;
Remarque :Trier par RAND()
est une opération lourde, vous feriez peut-être mieux de stocker une colonne indexée avec le code de hachage de l'url, puis d'utiliser une fonction basée sur un module ou d'autres fonctions aléatoires.