MCQ测验加载缓慢,随机化不起作用

时间:2013-02-19 13:28:42

标签: php mysql

我正在创建一个基于php和mysql的MCQ测验。以下是我主要表格的结构:

测验表:测验ID,quiz_category 类别表:id,title ... 问题表:id,quiz id,categoryid,title ... 答案表:id,question id ...

首先,我在表格中填写了150多个测验,4个类别,14000多个问题和每个问题的权利。

为节省时间,对于每个问题,从答案表https://stackoverflow.com/editing-helpalongwith中提取正确答案3其他随机答案。

现在当我用两个小测验进行测试时,它运行正常。但是通过150次测验,出现了几个问题:

  • 数据库很慢,以后的测验需要永远加载问题
  • 答案的随机化不再有效 - 连同正确的答案,其他选项显示相同的条目,使用户可以轻松猜出正确的答案。

您可以在我之前的Stackoverflow查询中看到我正在使用的代码。 https://stackoverflow.com/questions/14826573/randomising-questions-and-answers-php-quiz-not-working

对于测验程序的理想查询应该是什么?

1 个答案:

答案 0 :(得分:0)

我将提供一些有关如何提高性能的提示,但这些提示是通用的,可能不完整。

通过简要地查看PHP和SQL语句from your previous question,索引有一些逻辑位置。要添加索引,请转到MySQL manual以获取更多信息

$sql4="select * from answers where question_id=".$row2['id'];

question_id应该有一个索引

$sql2="select * from questions where quiz_id=".$_SESSION['quizid'];

quiz_id应该有一个索引

添加这两个索引也会提高对此

的选择性
$sql3="select * from answers where question_id in (select id from
questions where quiz_id =$row2[quiz_id]) order by rand()";

这将有助于您之前为每个查询执行全表扫描。

你的另一个问题是你有一个循环,并且在每次迭代时你发送命令来查询数据库,你应该在循环之前立即收集所有信息,然后使用它迭代而不是每次迭代发送单独的查询。 / p>