我正在开发一个在线考试应用程序,其中有一个问题主表,其中包含一个字段(名称:qtype),其中包含问题类型的数据。问题类型可以是以下三种类型之一:
- 单身的
- 多
- 描述
应用程序使用以下查询从该主表生成随机试卷:
select * from mst_question where test_id = 1 ORDER BY RAND() LIMIT 25
这会为我的在线考试申请生成一份包含 25 个问题的随机问卷。
到目前为止它工作得很好......
现在,我需要在我的应用程序中实现一个功能,其中 25 个随机生成的问题(或任何数字 - 这将取决于测试 id)将始终具有主问题表中可用的不同类型问题的固定组合( mst_question ) 对于每个随机生成的问卷集。
比如说,如果主问题表有 108 个特定测试 id 的问题,并且所有这三种类型的问题都在这个测试的数据库中,它将为每个随机查询提供相同数量的不同类型的问题!我编写了以下 sql 查询来找出主问题表中每种类型的问题的百分比。
到目前为止,我已经尝试过这个并想出了这个 sql 查询:
select qtype,count(*) as qtypetotal,(select count(*) from mst_question where test_id = 1) as totalqtype,round((count(*)/(select count(*) from mst_question where test_id = 1)*100),2) as qtypepercentage from mst_question where test_id = 1 group by qtype
上述查询的输出是:
qtype qtypetotal 总计qtype qtypepercentage 降 24 108 22.22 % 倍数 34 108 31.48 % 单人 50 108 46.30 %
我需要形成一个 sql 查询,它将给我 25 个随机生成的问题,其中 25 个问题中的 22.22% 应该是 desc 类型,25 个问题中的 31.48% 应该是多种类型,其余 46.30% 的 25 个问题应该是单一类型。
我被卡住了......请建议......
提前致谢 :-)
谢谢@MikeBrant ....我已经生成了动态sql,这绝对是我想要的方式......现在只有一个问题......如果我执行这个sql查询:
select qtype,round(25*(count(*)/(select count(*) from mst_question where test_id = 1))) as numquests from mst_question where test_id = 1 group by qtype
我得到以下结果:
"desc" "6" "multiple" "8" "single" "12"
并基于上面的查询,我生成了这个动态查询:
$dynamicsql[] = "(SELECT * FROM mst_question WHERE test_id = 1 AND qtype = '".trim($rstype->qtype)."' ORDER BY RAND() LIMIT ".$rstype->numquests.")";
$finalsql = implode(" UNION ALL ",$dynamicsql)." ORDER BY RAND()";
我想生成总共 25 个随机问题,但这些 qtypes 的总和是 26 !!!我还有一个额外的问题:-(