繁体   English   中英

SQL查询一对多关系

[英]SQL Query for a one to many relationship

我有两个表,表A和表B。对于表A中的每个记录,表B中有很多记录;对于表A,表B中有很多记录。 因此,表A和B之间存在一对多关系。我想执行一个查询,以便对于从表A返回的每一行,所有对应的行都将从表B返回。据我所知,我需要使用内部INNER Join -但是,我将如何通过说PHP访问所有返回的行?

$sql = "Select A.ID, B.Name * From A INNER JOIN B ON A.ID = B.ID";
A.ID  |  B.fName        |  B.lName
1          nameone         lnameone
1          nametwo         lnametwo
2          namethree       lnamethree
4          namefour        lnamefour

现在,我得到了上面的结果,我想使用PHP B.NameA.ID一个B.Name所有值。 因此,我想要的结果如下所示:

1.
nameOne lNameOne
nameTwo lnametwo

2. namethree lNamethree

4. nameFour lNameFour

基本上,我试图按表A中的ID对查询结果进行分组。

我非常感谢您的帮助!

谢谢,

埃文

您可以只使用Google“从数据库获取php”,并使用一些常规的数组预处理功能,但是我担心您发现的建议可能并不理想。 这是我要做的:

$pdo = new PDO('mysql:host=host;dbname=dbname', 'user', 'pass');
$result = $pdo->query(<<<SQL
   SELECT
      ID,
      Name
   FROM
      A
      -- Alternative to `JOIN B USING(ID)` or `JOIN B ON (A.ID = B.ID)
      NATURAL JOIN B
SQL
);
$a = array();
while ($row = $result->fetch()) {
   if (!isset($a[$row['ID']]) {
      $a[$row['ID']] = array();
   }
   $a[$row['ID']][] = $row['Name'];
}

你也可以GROUP BYIDGROUP_CONCAT的名字是explode在PHP d后跳过手动阵列创建和减少一些迭代(尽管SQL会在这种情况下,做多)。

在SQL查询中添加一个简单的ORDER BY A.ID可能会使您将这些项目“组合”在一起。 如果不确切地知道您要对“组”执行的操作,则很难给出更详细的答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM