显示测验测试的结果

时间:2014-03-16 12:30:01

标签: php mysql

我必须为公司员工进行测验测试,并且在显示测试结果时遇到逻辑问题。

数据库结构:

  • 问题 - 从界面插入的地方:id,questiontext。

  • 答案 - 我所拥有的:id,question_id,answertext和correct,如果它是一个好的答案,则值为1或0,1,如果不是,则为0。我的问题可以有多个正确的答案(这就是我被困的原因)。

  • User_result - 我有id,question_id,answer_id,正确可以是1或0,如答案表,user_test告诉我他根据他或多或少的问题和他的水平进行了哪个测试用户ID是唯一的。

问题:

我的问题是,如果一个问题有多个选择,我无法根据他给出的答案显示用户结果,如果一个问题只有一个正确的答案就很简单:

$eval = round(($score/40)*100,2);  

其中$得分是所有答案中mysql_num_rows的正确=' 1'。 40是他必须回答的问题数量。

我还有40,60,80和100个问题的不同类型的测验 - 我在测验管理中心分别进行测验,我也知道哪个用户参加了哪个测试,因为我在数据库上有记录。

显示结果的最佳方法是什么?

$restest = mysql_query("SELECT * 
                          FROM Tests 
                         WHERE mediu3luni='mediu3luni'", $testaredb);
while($test = mysql_fetch_assoc($restest))
{
    $resvar = mysql_query("SELECT * 
                             FROM Variante 
                            WHERE id_intrebare='{$test['id_intrebare']}' AND 
                                  corect='1'", $testaredb);
    $toatecorecte = mysql_num_rows($resvar);
    $toatevar = mysql_fetch_assoc($resvar);
    echo 'Question'.$toatevar['id_intrebare'].' has'.$toatecorecte.' correct answers<br>';
}

上面的代码将显示:

 Question id has X correct answers

上述代码也只选择了测试中的一些问题,这是从管理面板中配置的。

2 个答案:

答案 0 :(得分:0)

您的帖子在几个方面令人困惑:1)数据库表的名称与示例代码不一致。 2)您询问用户的正确答案数量,但您的示例是正确回答问题的次数。

编辑:修改了对此答案的评论。

所以,使用你的&#34;数据库结构&#34;名称:

用户的正确答案数量:

SELECT count(question_id) AS score
FROM   User_result
WHERE id = 'user_id' and user_test = 'a' and correct = 1

您可以执行类似操作,在测验中返回正确答案的数量

答案 1 :(得分:0)

尝试这样的事情:

<强> ERM:

+-----------+
| question  |
+-----------+
| id     PK |
| text      |
+-----------+

+-----------------+
| answer          |
+-----------------+
| id           PK |
| question_id  FK |
| text            |
| correct         |
+-----------------+

+--------------+
| user_result  |
+--------------+
| user_id   PK |
| answer_id PK |
+--------------+

您只需要知道answer user给出的questionanswer已经存在的关联{/ 1}}。

<强>查询:

SELECT 
    q.id,
    COUNT(a.id) as total_answers,
    SUM(a.correct) as correct_answers
FROM
    question q
INNER JOIN
    answer a ON (q.id = a.question_id)
INNER JOIN
    user_result ur ON (ur.answer_id = a.id)
GROUP BY
    q.id

我们在这里基本上做的是在每个user_result上获取answer的所有question,按question ID分组。然后,我们计算user_result s(给出的所有答案)并总结每个correct标志,得到如下公式:0 + 1 + 1 + 0 + 0 ...,这是给出的正确答案的数量所有用户。

如果您想要特定用户或特定问题,只需将此条件添加到查询的WHERE部分即可。这适用于多个正确的答案,以及根据需要在尽可能多的答案上单个答案。

<强> PHP:

在PHP中你可以做这样的事情:

<?php
$id = 12;

$query = "... WHERE q.id = $id";

$result = mysqli_query($query);
while ($row = mysqli_fetch_assoc($result)) {
    $total = $row['total_answers'];
    $correct = $row['correct_answers'];
    $percentage = round((($correct / $total) * 100), 2);

    echo 'Correct answers given by all users for question ' . $row['id'] . ': ' . $correct . ' (' . $precentage . '%)<br />';
}