Php 如何一次从多个表中获取数据?
我在一个数据库中有两个表。表Php 如何一次从多个表中获取数据?,php,mysql,Php,Mysql,我在一个数据库中有两个表。表questions,有两列,ID和question。表2answers有两列question\u ID和answer。在表答案中有多个与问题相关的答案。因此存在重复的问题IDs。如何显示表问题中的所有问题以及问题下方表答案中与其相关的所有答案?比如: 太阳有多远? 太阳在1800万英里之外。 太阳在9300万英里之外。 太阳在2英里之外。 太阳有多大? 大。 小。 中等。 等等 对不起,如果这个问题看起来有点模糊,但这是我能解释的最好方式。提前感谢。听起来问题和答案有
questions
,有两列,ID
和question
。表2answers
有两列question\u ID
和answer
。在表答案中
有多个与问题相关的答案。因此存在重复的问题ID
s。如何显示表问题中的所有问题以及问题下方表答案中与其相关的所有答案?比如:
太阳有多远?
太阳在1800万英里之外。
太阳在9300万英里之外。
太阳在2英里之外。
太阳有多大?
大。
小。
中等。
等等
对不起,如果这个问题看起来有点模糊,但这是我能解释的最好方式。提前感谢。听起来问题和答案有一对多的关系。答案表应该有一个布尔列,指示哪一个是正确的
答案表将有一个指向其父问题的外键。使用联接可以获得问题的所有答案
数据库中需要有两个表。如何在UI中呈现它们是另一个问题。保持这样。您将执行一个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作为$QueryRow)
{
if($PreviousQid==null | |$PreviousQid!=$QueryRow['question\u id']))
{
回显“$QueryRow['question']”,
\n;
}
echo$QueryRow['answer']。“\n”;
$PreviousQid=$QueryRow['question_id'];
}
您可以对这两个表执行联接查询,然后解析记录集以显示问答组
SELECT *
FROM questions inner join answers
ON questions.ID = answers.question_ID
ORDER BY questions.ID
然后,对于每条记录,如果问题与前一条记录中的不同,则打印新问题,然后打印答案。如果问题与上一条记录相同,只需打印新答案。这是正确答案。仅显示一次问题是应用程序中的显示逻辑。数据库的工作是为您提供所需的数据,而不是以特定的方式进行显示。
SELECT *
FROM questions inner join answers
ON questions.ID = answers.question_ID
ORDER BY questions.ID