商城系統(tǒng) 注冊(cè)

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

2020-09-27|HiShop
導(dǎo)讀:問(wèn)答答題小程序的開(kāi)發(fā)掀起了一股熱潮,我們?cè)陂_(kāi)發(fā)微信小程序答題系統(tǒng),需要實(shí)現(xiàn)隨機(jī)出題。尤其是一些比如闖關(guān)的環(huán)節(jié),需要隨機(jī)從題庫(kù)里抽取若干道題目,給到用戶答題。那么要...

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

  問(wèn)答答題小程序的開(kāi)發(fā)掀起了一股熱潮,我們?cè)陂_(kāi)發(fā)微信小程序答題系統(tǒng),需要實(shí)現(xiàn)隨機(jī)出題。尤其是一些比如闖關(guān)的環(huán)節(jié),需要隨機(jī)從題庫(kù)里抽取若干道題目,給到用戶答題。那么要如何來(lái)做呢?

  首先我們要做兩張表,一張是exam表,用來(lái)存考卷的。另外一張是題庫(kù)表,question表。

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

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

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

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

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

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

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

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

 $total=$questionTable->where($search)->count(); //查看下對(duì)應(yīng)的題目總數(shù)有多少

  if($total<=$getrand_Num){ //總的題目數(shù)比需要的還小 那就不用隨機(jī)了 直接出全部的題目就行了

  $offset = 0;

  }else{

  $offset = mt_rand(0, $total-1); //偏移量

  }

  $list=$questionTable->where($search)->field($field)->limit($offset,$getrand_Num)->select();

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

HiShop小程序工具提供多類(lèi)型商城/門(mén)店小程序制作,可視化編輯 1秒生成5步上線。通過(guò)拖拽、拼接模塊布局小程序商城頁(yè)面,所看即所得,只需要美工就能做出精美商城。

更多小程序開(kāi)發(fā)案例,盡在:http://westcoastpropertyservices.com/xiaocx/kaifa.html 

電話咨詢 預(yù)約演示 0元開(kāi)店