0

複数のテーブルから各質問と関連する回答を引き出す実用的な調査があります。各質問は次の表に保存されています。

  • tblQuestions、フィールド付き:
  • qID
  • qText。

関連する回答は次の表に保存されています。

  • tblPossAnswers、フィールド付き:
  • 援助
  • qID
  • answerText。

したがって、質問ごとに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

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、PHPで回答を分割する区切り文字を指定して、質問ごとにMySQLの結果をグループ化することもできます。

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 に答える
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 に答える