Mysql
 sql >> Base de données >  >> RDS >> Mysql

comment sélectionner des enregistrements uniques aléatoires à chaque exécution de la requête SQL

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.