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次。【个人感觉这种方法比较好】
参考:这里