Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何一次从多个表中获取数据?_Php_Mysql - Fatal编程技术网

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

Php 如何一次从多个表中获取数据?,php,mysql,Php,Mysql,我在一个数据库中有两个表。表questions,有两列,ID和question。表2answers有两列question\u ID和answer。在表答案中有多个与问题相关的答案。因此存在重复的问题IDs。如何显示表问题中的所有问题以及问题下方表答案中与其相关的所有答案?比如: 太阳有多远? 太阳在1800万英里之外。 太阳在9300万英里之外。 太阳在2英里之外。 太阳有多大? 大。 小。 中等。 等等 对不起,如果这个问题看起来有点模糊,但这是我能解释的最好方式。提前感谢。听起来问题和答案有

我在一个数据库中有两个表。表
questions
,有两列,
ID
question
。表2
answers
有两列
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