最近头脑王者很是火爆,公司也在开发相似头脑王者的答题系统,这个重任交到我这边来了,咱们在开发的这个微信小程序答题系统,须要实现随机出题。尤为是一些好比闯关的环节,须要随机从题库里抽取若干道题目,给到用户答题。那么要如何来作呢?php
首先咱们要作两张表,一张是exam表,用来存考卷的。另一张是题库表,question表。前端
在exam表里设置好考试的参数,好比说本次考试是随机抽多少题,而后在sql语句中,随机从question表中抽取题目。sql
注意了,划重点了,一些关键点来了。小程序
随机抽题目,通常人想到的是sql语句的 order by rand ,而后网上你搜下 order by rand语句的优化,也有人提到过,这个order by rand 执行效率很低。尤为是好比你的题库很大,若是你作大平台的,必定会在后期发生的。咱们本身是作平台的,开发好这套系统是要不断的复制卖给全部的须要的客户的。因此客户出的题目确定会愈来愈多,题库要越赖越大的。题库随着考试次数增多,题库将会变的很是大。因此提早就要想好解决办法,一次性把代码写到位。后端
使用ORDER BY RAND 一个15万余条的库,查询5条数据,竟然要8秒以上。查看官方手册,也说rand()放在ORDER BY 子句中会被执行屡次,天然效率及很低。微信小程序
怎么优化方法不少,你们自行百度,我用的是使用sql语句 limit的偏移量来作的。 微信
话很少说,直接上代码了。tp的风格哈。学习
$total=$questionTable->where($search)->count(); //查看下对应的题目总数有多少 if($total<=$getrand_Num){ //总的题目数比须要的还小 那就不用随机了 直接出所有的题目就好了 $offset = 0; }else{ $offset = mt_rand(0, $total-1); //偏移量 } $list=$questionTable->where($search)->field($field)->limit($offset,$getrand_Num)->select();
不知道各位看懂了没有,这个偏移量的,就是使用这个模式来随机抽取题目。但愿你也按照这个思路优化下你的考试答题系统的随机出题逻辑。 优化
我,秋峰,phper,目前自创业,作项目系统开发,php后端加小程序前端结合 今天就给你们分享到这里,但愿对你们有所帮助。欢迎交流 你们相互学习 共同提升 个人 微信号:qiufeng2999spa