我在数据库中有两个表。表questions
有两列,ID
和question
。表2 answers
有两列question_ID
和answer
。在表answers
中,有一个以上的答案与问题有关。所以有question_ID
个重复。如何从问题表questions
中显示表answers
中与问题相关的所有答案的所有问题?像:
太阳距离1800万英里 太阳距离9300万英里 太阳距离酒店有2英里。
大。
小。
平台。
等...
很抱歉,如果问题看起来有点模糊,但这是我能解释的最佳方式。 提前致谢。
答案 0 :(得分:6)
您将执行一个连接两个表的select查询,按问题ID排序。
SELECT q.ID as question_id, q.question, a.ID as answer_id, a.answer
FROM questions q
LEFT JOIN answers a ON a.question_ID = q.ID
ORDER BY q.ID, a.ID
这将为您提供如下结果集:
question_id question answer_id answer
1 What color is the sky? 100 Blue
1 What color is the sky? 101 Red
2 How old is dirt 102 Very Old
2 How old is dirt 103 Kinda Old
等
当你遍历这个结果集时,你需要跟踪最后一个问题是什么,这样当你转到第三个结果时,问题2,你知道要显示下一个问题。
e.g。
$PreviousQid = null;
foreach ($QueryResult as $QueryRow)
{
if ($PreviousQid === null || $PreviousQid != $QueryRow['question_id'])
{
echo "<b>" . $QueryRow['question'] . "</b><br/>\n";
}
echo $QueryRow['answer'] . "</br>\n";
$PreviousQid = $QueryRow['question_id'];
}
答案 1 :(得分:3)
听起来像问答有一对多的关系。答案表应该有一个布尔列,表明哪一个是正确的。
答案表将有一个指向其父问题的外键。您将使用JOIN获得问题的所有答案。
数据库中需要有两个表。如何在UI中呈现它们是一个单独的问题。保持这种方式。
答案 2 :(得分:2)
您可以对这两个表执行连接查询,然后解析记录集以显示问题/答案组。
SELECT *
FROM questions inner join answers
ON questions.ID = answers.question_ID
ORDER BY questions.ID
然后,对于每条记录,如果问题与上一条记录不同,请打印新问题,然后打印答案。如果问题与上一条记录相同,只需打印新答案。