代码之家  ›  专栏  ›  技术社区  ›  Babiker

如何同时从多个表中提取数据?

  •  2
  • Babiker  · 技术社区  · 14 年前

    我在一个数据库中有两个表。表 questions ,有两列, ID question . 表二 answers 有两列 question_ID answer . 在表格中 答案 一个问题有多个答案。所以有重复的 问题 S.如何显示表格中的所有问题? 问题 从表格中找出所有与之相关的答案。 答案 就在这个问题下面?像:

    太阳有多远?

    太阳在1800万英里外。
    太阳在9300万英里外。
    太阳离我们2英里远。

    太阳有多大?

    大的。
    小的。
    中等。

    等。。。

    对不起,如果这个问题看起来有点含糊,但这是我能解释的最好方式。 事先谢谢。

    3 回复  |  直到 14 年前
        1
  •  6
  •   emurano    14 年前

    您将执行一个连接两个表的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,你知道显示下一个问题。

    例如

    $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'];
    }
    
        2
  •  3
  •   duffymo    14 年前

    听起来问答有一对多的关系。答案表应该有一个布尔列来指示哪个列是正确的。

    答案表将有一个指向其父问题的外键。您将使用连接获得问题的所有答案。

    数据库中需要有两个表。如何在用户界面中呈现它们是一个单独的问题。保持这样。

        3
  •  2
  •   Andrew Cooper    14 年前

    您可以对两个表执行联接查询,然后分析记录集以显示问答组。

    SELECT * 
    FROM questions inner join answers
        ON questions.ID = answers.question_ID
    ORDER BY questions.ID
    

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