方法1:最简单的,网上说查询时间长,数据量少的话,使用该方法,不会出错,也不会重复查询。
select * from t_fb order by rand() limit 10
方法2: 网上说时间短,比较好。但是我的数据量少的情形下,查的数据会少于10条。
SELECT * FROM t_fb WHERE id >= ((SELECT MAX(id) FROM t_fb )-(SELECT MIN(id) FROM t_fb )) * RAND() + (SELECT MIN(id) FROM t_fb ) LIMIT 10;
该方法说了在数据量少的情形下,查的数据会少于10条。分析一下原因:
(SELECT MAX(id) FROM t_fb ) 查询id的最大值
(SELECT MIN(id) FROM t_fb ) 查询id的最小值
相减乘以一个随机数 再加上id的最小值,以保证生成的数在最大值和最小值之间,
现在假设MAX(id)为15,生成的随机数为10,那么由于id>=10,所以查询到的行数会少于10.
方法3 .SELECT * FROM t_fb as t1 JOIN (SELECT RAND()*10 AS nid) t2 ON t1.id>t2.nid GROUP BY t1.id LIMIT 10
也会有方法2的问题,然后查询出来的值都是连起来的