请看下面的代码:
$query = "
SELECT * FROM Question q
INNER JOIN StudentAnswer sa ON q.QuestionId = sa.QuestionId
JOIN Answer a ON sa.QuestionId = a.QuestionId
WHERE
('".mysql_real_escape_string($sessionid)."' = '' OR q.SessionId = '".mysql_real_escape_string($sessionid)."')
AND
('".mysql_real_escape_string($questionno)."' = '' OR q.QuestionNo = '".mysql_real_escape_string($questionno)."')
AND
('".mysql_real_escape_string($studentid)."' = '' OR sa.StudentId = '".mysql_real_escape_string($studentid)."')
AND(CorrectAnswer = '1')
ORDER BY $orderfield ASC";
while ($row = mysql_fetch_array($result)) {
echo "
<tr>
<td>{$row['SessionId']}</td>
<td>{$row['QuestionNo']}</td>
<td>{$row['QuestionContent']}</td>
<td>{$row['AnswerContent']}</td>
<td>{$row['StudentAnswer']}</td>
<td>{$row['Weight%']}</td>
<td></td>
<td>{$row['StudentId']}</td>
</tr>";
}
?>
每一行都是我数据库表中的一个字段。我感兴趣的有两行是:
<td>{$row['AnswerContent']}</td>
<td>{$row['StudentAnswer']}</td>
Answercontent行是正确答案的单词answer,我在查询的WHERE子句中提到过。但是在数据库表的真相中,AnswerContent字段包含的行,其中每个answerid都有单词答案。
对于学生选择的答案,studentanswer是一个id(studentanswerid)。我想要的是,对于StudentAnswer行,我不希望它显示身份证号码,例如10,5,2,而是我想通过单词显示学生的答案,例如橙色,蓝色,紫色。所以我想知道的是如何将AnswerContent和StudentAnswer合并在一起,这样无论StudentAnswer是什么,它都会通过'StudentAnswer'字段中的单词形式显示,而不是以id形式显示。
谢谢
答案 0 :(得分:0)
不要SELECT * FROM table
。只获取您想要的字段。选择所有列都会降低可维护性并增加数据库服务器的负载。
如果您不喜欢this answer,则可以随时在while
循环中执行第二次查询,在该循环中,您可以获取与StudentAnswer
匹配的答案的文字内容。但是,这不会像你上一个问题的答案那样有效。
如果没有对架构进行任何精确定义,那么编写适合您问题的实际查询会有点困难。