mysql - 如何在每次执行 SQL 查询时选择随机唯一记录

标签 mysql

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

从 masterurls 中选择 m.url ORDER BY RAND() LIMIT 200

问题是上面的查询仅返回前 20000 个记录,并且每次都会对其进行随机化。

最佳答案

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

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

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

SQL查询:

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

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

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

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

关于mysql - 如何在每次执行 SQL 查询时选择随机唯一记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4966154/

相关文章:

c# - C# 中的 MySQL 查询命令 SELECT 不返回任何内容

java - Struts + JSP中为下拉创建Mysql SELECT语句的逻辑是什么?

mysql - 使用单个列对多个表进行内连接,对结果值产生 'multiplier' 影响

mysql - 'created' 的默认值无效,但对 DATETIME 使用 CURRENT_TIMESTAMP

c# - mysql-c# 连接未完成

php - 使用 PDO 从 mysql 中的表创建 php 数组

mysql - 使用 ruby​​ 1.8.7 Mac OSX 10.6 安装 mysql2 gem

php - 未找到行时如何显示 "no results"消息?

php - 我想根据产品p_id显示数据

Select 中的 MySQL 程序?