求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
要资料
 
 

mysql教程
MySQL快速学习入门
MySQL是什么
MySQL安装
MySQL示例数据库
MySQL导入示例数据库
MySQL基础教程
MySQL查询数据
MySQL WHERE语句
MySQL插入数据
MySQL更新表数据
MySQL删除表数据
MySQL创建与删除数据库
MySQL创建表
MySQL修改表结构
MySQL重命名表
MySQL数据类型
高级部分
MySQL技巧
MySQL存储过程
MySQL视图
MySQL触发器
MySQL管理
MySQL全文搜索
MySQL函数
应用程序连接
MySQL+Node.js连接和操作
Python+MySQL连接和操作
 
 

MySQL随机选择记录
581 次浏览
3次  

在本教程中,您将学习从MySQL中的数据库表中查询选择随机记录的各种技术。

有时,必须从表中选择随机记录,例如:

在博客中选择一些随机的帖子,并在侧边栏中显示。

选择一个随机报价来显示“当天的报价”小部件。

在画廊中选择随机图片,并将其用作精选照片。

MySQL使用ORDER BY RAND()选择随机记录

MySQL没有任何内置语句从数据库表中选择随机记录。为了实现这一点,您可以使用RAND函数。以下查询从数据库表中选择一个随机记录:

SELECT
*
FROM
tbl
ORDER BY RAND()
LIMIT 1;

让我们更详细地查看上面的查询语句 -

RAND()函数为表中的每一行生成一个随机值。

ORDER BY子句通过RAND()函数生成的随机数对表中的所有行进行排序。

LIMIT子句选择随机排序的结果集中的第一行。

如果要从数据库表中选择N个随机记录,则需要如下更改LIMIT子句:

SELECT
*
FROM
table
ORDER BY RAND()
LIMIT N;

例如,要在customers表中查询选择5个随机客户,请使用以下查询:

SELECT
t.customerNumber, t.customerName
FROM
customers AS t
ORDER BY RAND()
LIMIT 5;

因为是随机,您可能会得到一个不同的结果集。

这种技术与一个小表上非常好。但是对于大表将是非常缓慢的,因为MySQL必须对整个表进行排序以选择随机数。查询的速度也取决于表中的行数。 表的行数越多,生成的随机数所花的时间就越多。

MySQL使用INNER JOIN子句选择随机记录

该技术要求您要选择随机记录的表具有自动增量主键字段,并且序列中没有间隙。

以下查询根据主键列生成随机数:

SELECT
ROUND(RAND() * ( SELECT
MAX(id)
FROM
table)) as id;

我们可以通过上述查询返回的结果集连接表,如下所示:

SELECT
t.*
FROM
table AS t
JOIN
(SELECT
ROUND(RAND() * (SELECT
MAX(id)
FROM
table )) AS id
) AS x
WHERE
t.id >= x.id
LIMIT 1;

使用这种技术,您可多次执行查询以获取多个随机行,因为如果增加限制,则查询将仅给出从随机选择的行开始的顺序行。

以下查询从customers表返回一个随机客户。

SELECT
t.customerNumber, t.customerName
FROM
customers AS t
JOIN
(SELECT
ROUND(RAND() * (SELECT
MAX(customerNumber)
FROM
customers)) AS customerNumber
) AS x
WHERE
t.customerNumber >= x.customerNumber
LIMIT 1;

MySQL使用变量选择随机记录

如果表的id列的值范围为1 .. N,并且范围内没有间隙,则可以使用以下技术:

首先,选择1..N范围内的随机数字。

第二步,根据随机数选择记录。

以下语句可以完成此操作:

SELECT
table. *
FROM
(SELECT
ROUND(RAND() * (SELECT
MAX(id)
FROM
table)) random_num,
@num:=@num + 1
FROM
(SELECT @num:=0) AS a, table
LIMIT N) AS b,
table AS t
WHERE
b.random_num = t.id;

请注意,用户定义的变量是连接特定的。这意味着这种技术不能与连接池一起使用。此外,主键必须是整数类型,其值必须在没有间隙的序列中。

在本教程中,我们向您展示了从表中选择随机记录的几种技术。


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



581 次浏览
3次
 捐助