在很多应用场景下,我们需要从数据库表中随机获取一条或者多条记录。这里主要介绍对比两个方法。

1:获取一条记录,最简单的方法,但经过测试认证,效率也是最低,查询时间是最长。

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

使用中RAND()函数调用可以在0和1之间产生一个随机数。

如果你想要查询多个记录可以将LIMIT 1 改为 LIMIT n , n代表你要返回的数据量。官方手册讲解:在MYSQL的官方手册,里面针对RAND()的提示大概意思就是,在ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描。

2:此方法经过测试速度非常快,在数万个记录中随机获取数据并且加上条件筛选也能在0.02s左右的时间返回,可以说速度是非常快,效率非常高的。

SELECT t1.id,t1.word,t1.status FROM hy_idiom AS t1 JOIN 
(SELECT ROUND(RAND() * ((SELECT MAX(id) FROM hy_idiom 
where status=1)-(SELECT MIN(id) FROM hy_idiom 
where status=1))+(SELECT MIN(id) FROM hy_idiom  
where status=1 )) AS id) AS t2 WHERE t1.id >= t2.id AND t1.status=1 
ORDER BY t1.id LIMIT 5 ;

LIMIT 5 表示取出5条记录,可根据需要对SQL语句进行修改即可使用。

具体案例。我开发了一款成语闯关小程序,不同的阶段读取对应阶段的成语给用户进行闯关。假设我现在分成3个阶段。小学、初中、大神。小学阶段读取一个成语进行挑战,初中阶段读取2个成语进行挑战,大神阶段读取3个成语进行挑战。那么这个时候就涉及按阶段随机读取的问题。

看看案例演示你就明白了:

 

 

Logo

本社区面向用户介绍CSDN开发云部门内部产品使用和产品迭代功能,产品功能迭代和产品建议更透明和便捷

更多推荐