0

我有一个工作调查,从多个表格中提取每个问题和任何相关答案。每个问题都存储在下表中:

  • 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 还是有点陌生​​,所以解决方案可能非常简单,我只是没有看到。

4

2 回答 2

0

无需更改 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'];

}
于 2012-05-08T09:28:13.483 回答
0

您可以测试问题是否在您的 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'];
}

或者,您可以使用 将 MySQL 结果按问题分组GROUP_CONCAT,指定一个分隔符,然后在 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;
  }
}
于 2012-05-08T09:26:46.570 回答