下面我有 4 个数据库表,Session、Question、Answer 和 Option_Type。
会话表:
SessionId SessionName
1 AAA
问题表:
SessionId QuestionId QuestionContent OptionId
1 1 What is 1+1 and 4+4 2
1 2 Does 2+2 = 4 26
1 3 What is 3+3 and 5+5 3
答案表:
AnswerId SessionId QuestionId Answer
1 1 1 B
2 1 1 C
3 1 2 Yes
4 1 3 A
5 1 3 C
Option_Type
OptionId OptionType
1 A-C
2 A-D
3 A-E
4 A-F
.... goes up to 24 where it goes up to A-Z
25 True or False
26 Yes or No
现在在这里的 jsfiddle 中,我创建了一个演示 html 表,您可以在这里看到
现在,如果您仔细查看 html 表格,您会意识到我要做的是在“不正确答案”列下显示不正确的答案。
所以我想做的是,例如对于问题 1,如果您查看数据库表,问题 1 的“OptionId”为 2,这意味着如果您在“Option_Type”表下查找“OptionId”,则“OptionType ",因为这个 OptionId 是 "AD"。所以选项是“A”、“B”、“C”和“D”。问题 1 的答案是“B”和“C”。所以我不想在表格中显示这些答案,因为它们是正确的,但我想显示其他选项“A”和“D”,因为它们不正确。
这有意义吗?我的问题实际上是如何不在“不正确答案”列下显示正确答案,而是在下面的代码中每个问题在此列下显示其他选项:
$query = "SELECT q.SessionId, s.SessionName, q.QuestionId, q.QuestionContent, an.Answer, q.QuestionMarks
FROM Session s
INNER JOIN Question q ON s.SessionId = q.SessionId
JOIN Answer an ON q.QuestionId = an.QuestionId AND an.SessionId = q.SessionId
WHERE s.SessionName = ?
ORDER BY q.QuestionId, an.Answer
";
// prepare query
$stmt=$mysqli->prepare($query);
// You only need to call bind_param once
$stmt->bind_param("s", $assessment);
// execute query
$stmt->execute();
// This will hold the search results
$searchQuestionId = array();
$searchQuestionContent = array();
$searchAnswer = array();
$searchMarks = array();
// Fetch the results into an array
// get result and assign variables (prefix with db)
$stmt->bind_result($dbSessionId, $dbSessionName, $dbQuestionId, $dbQuestionContent, $dbAnswer, $dbQuestionMarks);
while ($stmt->fetch()) {
$searchQuestionId[] = $dbQuestionId;
$searchQuestionContent[] = $dbQuestionContent;
$searchAnswer[] = $dbAnswer;
$searchMarks[] = $dbQuestionMarks;
}
?>
</head>
<body>
<form id="QandA" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
<?php
echo "<table border='1' id='markstbl'>
<tr>
<th class='questionth'>Question No.</th>
<th class='questionth'>Question</th>
<th class='answerth'>Incorrect Answer</th>
<th class='answermarksth'>Penalty per Incorrect Answer</th>
</tr>\n";
$previous_question_id = null;
$rowspans = array_count_values($searchQuestionId);
foreach ($searchQuestionContent as $key=>$question) {
// removed logic, not necessary to set empty strings if you're skipping them
echo '<tr class="questiontd">'.PHP_EOL;
if ($previous_question_id != $searchQuestionId[$key]) {
echo '<td class="questionnumtd" name="numQuestion" rowspan="'.$rowspans[$searchQuestionId[$key]].'">'.htmlspecialchars($searchQuestionId[$key]).'</td>' . PHP_EOL;
echo '<td class="questioncontenttd" rowspan="'.$rowspans[$searchQuestionId[$key]].'">'.htmlspecialchars($question).'</td>' . PHP_EOL;
}
echo '<td class="answertd" name="answers[]">';
echo $searchAnswer[$key];
echo '</td>' ;
echo '<td class="answermarkstd"><input class="individualMarks" name="answerMarks[]" id="individualtext" type="text" /></td>' . PHP_EOL;
// moved this to the end
if ($previous_question_id != $searchQuestionId[$key]) {
$previous_question_id = $searchQuestionId[$key];
}
}
echo '</tr>';
echo "</table>" . PHP_EOL;
?>
</form>
目前,上面的代码在“不正确答案”列下显示正确答案,而不是错误答案。