2

我有两个表,表 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";
身份证 | B.f姓名 | B.lName
1 个名字
1 nametwo lnametwo
2 名称三 lnamethree
4 namefour lnamefour

现在我有了上面的结果,我想使用 PHP 来循环遍历所有的值,B.Name一次只有A.ID一个。所以,我想要的结果看起来像:

1.
nameOne lNameOne
nameTwo lnametwo

2.namethree lNamethree

4.nameFour lNameFour

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

我非常感谢帮助!

谢谢,

埃文

4

2 回答 2

0

你可以只用谷歌“php get from database”并使用一些普通的数组预处理,但我担心你找到的建议可能并不理想。这是我要做的:

$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 BY在PHP 中使用 dIDGROUP_CONCAT名称来explode跳过手动创建数组并减少一些迭代(尽管在这种情况下 SQL 会做得更多)。

于 2012-05-22T14:28:06.330 回答
0

向 SQL 查询添加一个简单ORDER BY A.ID的语句可能会让您在将项目“分组”在一起方面走得很远。如果不确切知道您想对“组”做什么,很难给出更详细的答案。

于 2012-05-22T14:31:02.917 回答