从mysql表中随机取出几行数据

select * from a order by rand() limit m,n;

上面这句话可以随机取出n条记录。但是效率非常差。

有两种解决方法。

第一、从根源上去解决。如果一定要随机取出n条记录,可以:

1、取出表总条数n

2、在应用程序中生成n个随机数(区间在0到n-1)

3、去数据库中把这些记录取出来

【这种方法思路上是存在缺陷的:如果生成的id在数据库中不存在...就...思密达了】

第二、优化mysql查询语句

搜索Google,网上基本上都是查询max(id) * rand()来随机获取数据。

SELECT *
FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM `table`)) AS id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id ASC LIMIT 5;

但是这样获得的是5条连续的记录。解决办法只能是每次查询一条,查询5次。【个人感觉这种方法比较好】

参考:这里

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值