如何在每次执行SQL Query时选择随机唯一记录

时间:2011-02-11 06:15:31

标签: mysql

我有一张表“braurls”它有超过100万条记录。我想在每次执行查询时获取随机记录。它不应该包含先前执行中提取的任何记录。我已经有了这个问题:

SELECT m.url FROM masterurls ORDER BY RAND() LIMIT 200

问题是上面的查询只返回前200条记录并每次随机化。

2 个答案:

答案 0 :(得分:2)

您如何知道之前是否已访问过该网址。我最好的建议是设置一个标志,以便在表格中知道这一点。在表中添加一个类似于视图的字段,它将接受两个值1或0,1表示已访问,0表示未访问。然后你可以使用

SELECT m.url FROM masterurls m WHERE view='1' ORDER BY RAND() LIMIT 200;

答案 1 :(得分:2)

由于您可以将种子参数传递给RAND()函数,因此您可以通过在第一页之前生成种子来“分页”随机结果。

示例代码: 对于第一页(因语言而异):

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

SQL查询:

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

将种子存储在某处(对于基于Web的应用程序,您可以使用url参数或会话)。 对于下一页:

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

注意:按RAND()排序是一项繁重的操作,您可能最好使用网址的哈希代码存储索引列,然后使用基于模块或其他随机函数。