Mysql
 sql >> Database >  >> RDS >> Mysql

come selezionare record univoci casuali su ogni esecuzione della query SQL

Poiché puoi passare un parametro seed a RAND() funzione, puoi "impaginare" i risultati casuali generando un seme prima della prima pagina.

Codice di esempio:per la prima pagina (varia in base alla lingua):

int seed = Math.abs(new Random().nextInt());

Query SQL:

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

Archivia il seme da qualche parte (per le applicazioni basate sul Web puoi utilizzare un parametro url o una sessione). Per le pagine successive:

SELECT url FROM masterurls ORDER BY RAND({seed}) LIMIT 200 * {pageNumber}, 200;

Nota:ordinamento per RAND() è un'operazione pesante, è meglio memorizzare una colonna indicizzata con il codice hash dell'URL, quindi utilizzare un modulo o altre funzioni casuali.