我正在使用moodle Multitrack测试来开展职业评估测试。我想修改插件以显示随机问题,一次一个问题。因此,如果总共有10个问题,那么它应首先显示一个随机问题,然后保存,然后显示其余9个问题中的随机问题,依此类推。问题保存在名为' magtest_question'的表格中。其领域是:
id(bigint),
magtestid(bigint),
questiontext(longtext),
questiontextformat(mediumint),
sortorder(bigint).
问题根据'排序顺序排序'柱。所以我尝试将查询更改为随机排序。
SELECT * FROM {magtest_question} WHERE magtestid=? ORDER BY RAND()
但它有时会再次出现同样的问题。我想避免尝试的问题。如何使用sql查询实现此目的。请帮忙。
答案 0 :(得分:1)
以随机顺序查询所有10个问题的ID,按查询返回的顺序将数据存储在数组中,然后逐个检索问题。这样,您只需发出一次order by rand()
查询,问题就不会重复了。
答案 1 :(得分:0)
您需要排除已经回答的问题
像
这样的东西$sql = "SELECT q.*
FROM {magtest_question} q
WHERE q.magtestid = :magtestid
AND NOT EXIST (SELECT a.id
FROM {magtest_answer} a
WHERE a.questionid = q.id
AND a.userid = :userid)
ORDER BY RAND()";
$params = array('magtestid' => $magtest->id, 'userid' => $USER->id);
$questions = $DB->get_records_sql($sql, $params, $currentpage * $magtest->pagesize, $magtest->pagesize);