在 PDO 中将 1 行连接到多行
Join 1 Row to Multiple Rows in PDO
这是我的场景:
Database Name: Children
+-------------+---------+---------+
| child_id | name | user_id |
+-------------+---------+---------+
1 Beyonce 33
2 Cher 33
3 Madonna 33
4 Eminem 33
Database Name: Parents
+-------------+---------+---------+
| parent_id | child_id | parent_name |
+-------------+---------+---------+
1 1 Obama
2 1 Michelle
3 4 50cents
4 4 Gaga
Desired Output:
+-------------+---------+---------+
| child_id | name | parent Name |
+-------------+---------+---------+
1 Beyonce Obama (Row 1) Michelle (Row 2)
PHP SQL PDO 查询:
$sql = "SELECT Children.child_id, Children.name, Parents.parent_name
FROM Children
LEFT JOIN Parents
ON Children.child_id = Parents.child_id
WHERE Children.user_id = ?
";
$stmt = $db_PDO->prepare($sql);
if($stmt->execute(array($userId))) // $userId defined earlier
{
// Loop through the returned results
$i = 0;
foreach ($stmt as $row) {
$fetchArray[$i] = array (
'childId' => $row['child_id'],
'childName' => $row['name'],
'parentName' => $row['parent_name'],
// How do I save the multiple parents from other rows here ????
);
$i++;
}
}
如何 运行 在 PDO 的第二个 table 中将 1 行连接到多行的查询?我在这里阅读了其他主题,但我不确定。添加第二个查询以在循环中分别获取每个 child_id 的链接父项是否更容易?我担心会有太多查询。有人可以帮我解决这个问题吗?
嗨,此查询仅在您传递子 ID 时有效,
select a.child_id, name ,group_concat(parent_name ) parent_name from children a, parents b where a.child_id =b.child_id 和 a.child_id=1
我在这里使用一个名为 group_concat 的函数,它用于连接 rows.It 自动获取计数大于 1.So 的行,不再需要额外的代码
执行以下查询。您将根据需要获得输出,我只是使用了根据 selected 列
对记录进行分组的组
select a.child_id, name ,group_concat(parent_name) from children a, parents b where a.child_id =b.child_id 分组 a.child_id
好吧,我花了一些时间来测试它,但现在就开始吧。
不幸的是,人们无法轻松地在 mysql 中对表格进行透视,但还有其他选择。
http://sqlfiddle.com/#!9/1228f/26
SELECT GROUP_CONCAT(
CONCAT_WS(':', Parents.parent_id,Parents.parent_name) ) FROM Parents where Parents.child_id=1
;
SELECT
Children.child_id,
Children.name,
GROUP_CONCAT(
CONCAT_WS(':', Parents.parent_id,Parents.parent_name) ) as parents
FROM
Children
LEFT JOIN Parents
ON Children.child_id = Parents.child_id
WHERE Children.user_id = 33
Group by Children.child_id
此查询使用 group concat 将我们想要的所有结果连接成冒号分隔的字符串,其中包含我们想要的值,各个字段之间使用逗号。
我们可以做一些棘手的魔术来使它们成为单独的字段,但这会破坏我们的 php 因为我们不知道每个查询会有多少字段 return(采用,孤儿,未知 parents, 等等...)
在 php 中,您可以将它们放入 object
$parents = array();
$loop1 = explode(',',$row['parents']);
foreach($loop1 as $parentset) {
$parentdetail = explode(":",$parentset);// decide yourself how much detail you want in here... I jsut went with name and id.
$parent = new stdClass();
$parent->id = $parentdetail[0];
$parent->name = $parentdetail[1];
array_push($parents,$parent);
}
var_dump($parents);
这是我的场景:
Database Name: Children
+-------------+---------+---------+
| child_id | name | user_id |
+-------------+---------+---------+
1 Beyonce 33
2 Cher 33
3 Madonna 33
4 Eminem 33
Database Name: Parents
+-------------+---------+---------+
| parent_id | child_id | parent_name |
+-------------+---------+---------+
1 1 Obama
2 1 Michelle
3 4 50cents
4 4 Gaga
Desired Output:
+-------------+---------+---------+
| child_id | name | parent Name |
+-------------+---------+---------+
1 Beyonce Obama (Row 1) Michelle (Row 2)
PHP SQL PDO 查询:
$sql = "SELECT Children.child_id, Children.name, Parents.parent_name
FROM Children
LEFT JOIN Parents
ON Children.child_id = Parents.child_id
WHERE Children.user_id = ?
";
$stmt = $db_PDO->prepare($sql);
if($stmt->execute(array($userId))) // $userId defined earlier
{
// Loop through the returned results
$i = 0;
foreach ($stmt as $row) {
$fetchArray[$i] = array (
'childId' => $row['child_id'],
'childName' => $row['name'],
'parentName' => $row['parent_name'],
// How do I save the multiple parents from other rows here ????
);
$i++;
}
}
如何 运行 在 PDO 的第二个 table 中将 1 行连接到多行的查询?我在这里阅读了其他主题,但我不确定。添加第二个查询以在循环中分别获取每个 child_id 的链接父项是否更容易?我担心会有太多查询。有人可以帮我解决这个问题吗?
嗨,此查询仅在您传递子 ID 时有效,
select a.child_id, name ,group_concat(parent_name ) parent_name from children a, parents b where a.child_id =b.child_id 和 a.child_id=1
我在这里使用一个名为 group_concat 的函数,它用于连接 rows.It 自动获取计数大于 1.So 的行,不再需要额外的代码
执行以下查询。您将根据需要获得输出,我只是使用了根据 selected 列
对记录进行分组的组select a.child_id, name ,group_concat(parent_name) from children a, parents b where a.child_id =b.child_id 分组 a.child_id
好吧,我花了一些时间来测试它,但现在就开始吧。 不幸的是,人们无法轻松地在 mysql 中对表格进行透视,但还有其他选择。
http://sqlfiddle.com/#!9/1228f/26
SELECT GROUP_CONCAT(
CONCAT_WS(':', Parents.parent_id,Parents.parent_name) ) FROM Parents where Parents.child_id=1
;
SELECT
Children.child_id,
Children.name,
GROUP_CONCAT(
CONCAT_WS(':', Parents.parent_id,Parents.parent_name) ) as parents
FROM
Children
LEFT JOIN Parents
ON Children.child_id = Parents.child_id
WHERE Children.user_id = 33
Group by Children.child_id
此查询使用 group concat 将我们想要的所有结果连接成冒号分隔的字符串,其中包含我们想要的值,各个字段之间使用逗号。
我们可以做一些棘手的魔术来使它们成为单独的字段,但这会破坏我们的 php 因为我们不知道每个查询会有多少字段 return(采用,孤儿,未知 parents, 等等...)
在 php 中,您可以将它们放入 object
$parents = array();
$loop1 = explode(',',$row['parents']);
foreach($loop1 as $parentset) {
$parentdetail = explode(":",$parentset);// decide yourself how much detail you want in here... I jsut went with name and id.
$parent = new stdClass();
$parent->id = $parentdetail[0];
$parent->name = $parentdetail[1];
array_push($parents,$parent);
}
var_dump($parents);