如何一次从多个表中获取数据?

时间:2010-11-12 01:10:09

标签: php mysql

我在数据库中有两个表。表questions有两列,IDquestion。表2 answers有两列question_IDanswer。在表answers中,有一个以上的答案与问题有关。所以有question_ID个重复。如何从问题表questions中显示表answers中与问题相关的所有答案的所有问题?像:

太阳有多远?

太阳距离1800万英里 太阳距离9300万英里 太阳距离酒店有2英里。

太阳有多大?

大。
小。
平台。

等...

很抱歉,如果问题看起来有点模糊,但这是我能解释的最佳方式。 提前致谢。

3 个答案:

答案 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

然后,对于每条记录,如果问题与上一条记录不同,请打印新问题,然后打印答案。如果问题与上一条记录相同,只需打印新答案。