小程序模板網(wǎng)

微信小程序--答題系統(tǒng)實(shí)現(xiàn)隨機(jī)出題

發(fā)布時(shí)間:2018-05-07 15:03 所屬欄目:小程序開發(fā)教程

最近頭腦王者非?;鸨?,公司也在開發(fā)類似頭腦王者的答題系統(tǒng),這個(gè)重任交到我這邊來了,我們?cè)陂_發(fā)的這個(gè)微信小程序答題系統(tǒng),需要實(shí)現(xiàn)隨機(jī)出題。尤其是一些比如闖關(guān)的環(huán)節(jié),需要隨機(jī)從題庫里抽取若干道題目,給到用戶答題。那么要如何來做呢?

首先我們要做兩張表,一張是exam表,用來存考卷的。另外一張是題庫表,question表。

在exam表里設(shè)置好考試的參數(shù),比如說本次考試是隨機(jī)抽多少題,然后在sql語句中,隨機(jī)從question表中抽取題目。

 

注意了,劃重點(diǎn)了,一些關(guān)鍵點(diǎn)來了。

隨機(jī)抽題目,一般人想到的是sql語句的 order by rand ,然后網(wǎng)上你搜下 order by rand語句的優(yōu)化,也有人提到過,這個(gè)order by rand 執(zhí)行效率很低。尤其是比如你的題庫很大,如果你做大平臺(tái)的,一定會(huì)在后期發(fā)生的。我們自己是做平臺(tái)的,開發(fā)好這套系統(tǒng)是要不斷的復(fù)制賣給所有的需要的客戶的。所以客戶出的題目肯定會(huì)越來越多,題庫要越賴越大的。題庫隨著考試次數(shù)增多,題庫將會(huì)變的非常大。所以提前就要想好解決辦法,一次性把代碼寫到位。

小程序答題系統(tǒng) 小程序答題

使用ORDER BY RAND 一個(gè)15萬余條的庫,查詢5條數(shù)據(jù),居然要8秒以上。查看官方手冊(cè),也說rand()放在ORDER BY 子句中會(huì)被執(zhí)行多次,自然效率及很低。

怎么優(yōu)化方法很多,大家自行百度,我用的是使用sql語句 limit的偏移量來做的。

話不多說,直接上代碼了。tp的風(fēng)格哈。

 

				
  1. $total=$questionTable->where($search)->count(); //查看下對(duì)應(yīng)的題目總數(shù)有多少
  2. if($total<=$getrand_Num){ //總的題目數(shù)比需要的還小 那就不用隨機(jī)了 直接出全部的題目就行了
  3. $offset = 0;
  4. }else{
  5. $offset = mt_rand(0, $total-1); //偏移量
  6. }
  7. $list=$questionTable->where($search)->field($field)->limit($offset,$getrand_Num)->select();

不知道各位看懂了沒有,這個(gè)偏移量的,就是使用這個(gè)模式來隨機(jī)抽取題目。希望你也按照這個(gè)思路優(yōu)化下你的考試答題系統(tǒng)的隨機(jī)出題邏輯。

我,秋峰,phper,目前自創(chuàng)業(yè),做項(xiàng)目系統(tǒng)開發(fā),php后端加小程序前端結(jié)合 今天就給大家分享到這



易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉庫:starfork
本文地址:http://m.u-renovate.com/wxmini/doc/course/24292.html 復(fù)制鏈接 如需定制請(qǐng)聯(lián)系易優(yōu)客服咨詢:800182392 點(diǎn)擊咨詢
QQ在線咨詢
AI智能客服 ×