how to select random unique records on each execution of the SQL Query

前端 未结 2 1030
孤城傲影
孤城傲影 2020-12-21 16:25

I have a table \"masterurls\" it has morethan 1 million records. I want to fetch random records each time the query executed. It should not have any of the records that were

相关标签:
2条回答
  • 2020-12-21 16:36

    Since you can pass a seed parameter to the RAND() function, you can "paginate" the random results by generating a seed before the first page.

    Sample code: For the first page (varies by language):

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

    SQL query:

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

    Store the seed somewhere (for web-based applications you can use a url parameter or session). For the next pages:

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

    Note: Sorting by RAND() is a heavy operation, you might be better off storing a indexed column with the Hash Code of the url, then using a module-based or other random functions.

    0 讨论(0)
  • 2020-12-21 16:49

    How are you going to know if the url is already accessed before. My best suggestion would be setting a flag to know this in the table. Add a field like view in the table which will accept two values 1 or 0, 1 for already accessed and 0 for not accessed. Then you could use

    SELECT m.url FROM masterurls m WHERE view='1' ORDER BY RAND() LIMIT 200;
    
    0 讨论(0)
提交回复
热议问题