我有一个工作调查,从多个表格中提取每个问题和任何相关答案。每个问题都存储在下表中:
- tblQuestions,带有以下字段:
- qID
- q文本。
相关答案存储在表中:
- tblPossAnswers,字段如下:
- 援助
- qID
- 回答文本。
因此,每个问题都有3个可能的答案。我拉取一切的sql是:
select * from tblQuestions, tblPossAnswers where
tblPossAnswers.qID = tblQuestions.qID
order by tblQuestions.qID ASC
和我的PHP显示它:
while ($row = mysql_fetch_array($result)) {
echo "<p>" . $row['qText'] . "</p><br />";
echo "<input type='radio' name='".$row['qID']."' value='".$row['aID']."' />";
echo $row['answerText'];
}
问题是每次显示可能的答案时都会显示 qText。所以它看起来像:
- 问题1
- 可能的答案 1
- 问题1
- 可能的答案 2
- 问题1
- 可能的答案 3
- 问题2
- 可能的答案 1
- 问题2
- 可能的答案 2
- 问题2
- 可能的答案3
我想做的是让qText仅在提取第一个可能的答案时显示。我仍然是MySQL的新手,所以解决方案可能非常简单,我只是没有看到。
您可以测试问题是否在 PHP 循环中发生了变化:
while ($row = mysql_fetch_array($result)) {
if ($row['qID'] != $lastQuestionID) {
echo "<p>" . $row['qText'] . "</p><br />";
$lastQuestionID = $row['qID'];
}
echo "<input type='radio' name='".$row['qID']."' value='".$row['aID']."' />";
echo $row['answerText'];
}
或者,您可以使用GROUP_CONCAT
按问题对MySQL结果进行分组,指定一个分隔符,然后在PHP中拆分答案:
select *, group_concat(answerText separator char(30)) as answers
from tblQuestions join tblPossAnswers using (qID)
group by tblQuestions.qID
order by tblQuestions.qID ASC
然后:
while ($row = mysql_fetch_array($result)) {
echo "<p>" . $row['qText'] . "</p><br />";
foreach (explode(chr(30), $row['answers']) as $answer) {
echo "<input type='radio' name='".$row['qID']."' value='".$answer."' />";
echo $answer;
}
}
无需在 sql 中更改任何内容,只需稍微更改 php,如下所示
while ($row = mysql_fetch_array($result)) {
if ($row['qText'] != $lastQuestion) {
echo "<p>" . $row['qText'] . "</p><br />";
$lastQuestion = $row['qText'];
}
echo "<input type='radio' name='".$row['qID']."' value='".$row['aID']."' />".$row['answerText'];
}