Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

como selecionar registros únicos aleatórios em cada execução da consulta SQL


Como você pode passar um parâmetro seed para o RAND() função, você pode "paginar" os resultados aleatórios gerando uma semente antes da primeira página.

Código de exemplo:Para a primeira página (varia de acordo com o idioma):
int seed = Math.abs(new Random().nextInt());

Consulta SQL:
SELECT url FROM masterurls ORDER BY RAND({seed}) LIMIT 200;

Armazene a semente em algum lugar (para aplicativos baseados na web, você pode usar um parâmetro ou sessão de url). Para as próximas páginas:
SELECT url FROM masterurls ORDER BY RAND({seed}) LIMIT 200 * {pageNumber}, 200;

Nota:Classificando por RAND() é uma operação pesada, talvez seja melhor armazenar uma coluna indexada com o código hash da url e, em seguida, usar uma função baseada em módulo ou outras funções aleatórias.