从表中显示随机问题而不重复

时间:2016-07-12 11:42:47

标签: mysql sql moodle

我正在使用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查询实现此目的。请帮忙。

2 个答案:

答案 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);