mysql 随机记录_随机获取N条数据库记录的四个方法

我需要从一个数据库表中随机的获取N条数据库,最先想到的办法是两次访问数据库,第一次是获得记录条数M,然后在产生个N随机数Kj(0<=j

但是两次查询数据库是其缺点,简单实现方法如下:

$range_result = mysql_query( ” SELECT MAX(id) AS max_id , MIN(id) AS min_id FROM tb_name “);

$range_row = mysql_fetch_object( $range_result );

$random = mt_rand( $range_row->min_id , $range_row->max_id );

$result = mysql_query( ” SELECT * FROM tb_name WHERE id >= $random LIMIT 0,1 “);

于是查阅其手册(MySQL),其中提到用order by rand() 和limit两结合来获取随机记录。另外google了一下,还发现了其他一些好的方法,特记录下来:

1) 采用官方的方式

select * from tb_name order by rand() limit N

2)采用类似偏移方式

select * from tb_name

where id >= (select floor(max(id) * rand()) from tb_name )

order by id asc limit N;

3)优化的方式

select *

from tb_name as r1 join

(select round(rand() *

(select max(id)

from tb_name)) as id2)

as r2

where r1.id >= r2.id2

order by r1.id asc

limit N;

上述方法,第一种效率最低,第三种最好。

觉得文章有用?立即:

和朋友一起 共学习 共进步!

猜您喜欢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值