我有两个表,表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.Name
循环遍历A.ID
的所有值。所以,我想要的结果如下:
1. nameOne lNameOne nameTwo lnametwo 2. namethree lNamethree 4. nameFour lNameFour
基本上,我正在尝试按表A中的ID对查询结果进行分组。
我非常感谢你的帮助!
谢谢,
埃文
答案 0 :(得分:0)
你可以只谷歌“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 BY
ID
和GROUP_CONCAT
名称为explode
,以便跳过手动数组创建并减少一些迭代(尽管SQL将会在这种情况下做更多的事情)。
答案 1 :(得分:0)
在SQL查询中添加一个简单的ORDER BY A.ID
可能会让您将这些项目“分组”在一起。如果不确切地知道你想对“群体”做什么,就很难给出更详细的答案。