我必须为公司员工进行测验测试,并且在显示测试结果时遇到逻辑问题。
数据库结构:
问题 - 从界面插入的地方: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
上述代码也只选择了测试中的一些问题,这是从管理面板中配置的。
答案 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
给出的question
与answer
已经存在的关联{/ 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 />';
}