gpt4 book ai didi

php - mysql获取具有可用结构中关系的记录

转载 作者:行者123 更新时间:2023-11-29 20:41:40 24 4
gpt4 key购买 nike

假设我有 2 张 table 。 parent & child 其中父级可以有多个子级。

我想获取以下结构的数据:

[
{ parent_id:1, children: [{child_id: 1, parent_id:1},{ child_id:2, parent_id:1}],
{ parent_id:2, children: [{child_id: 3, parent_id:2},{ child_id:4, parent_id:2}],
{ parent_id:3, children: [{child_id: 5, parent_id:3},{ child_id:6, parent_id:3}]
]

JOIN 为我提供每个子项的重复父项数据,而 GROUP BY Parent_id 只为我提供每个父项 1 个子项。

目前我的解决方案是:SELECT * fromparent循环遍历结果,然后SELECT * FROM child WHEREparent_id = :parent_id。我觉得必须有更好的方法。

MySQL 是否能够通过更少的查询来执行此操作,如果可以,我将如何处理?

<小时/>

编辑:基于使用GROUP_CONCAT黑客解决方案:

$q = "SELECT p.*, GROUP_CONCAT(c.id,'|#|', c.column_2, '|#|', c.column3, '|#|', c.column4 SEPARATOR '###') AS children
FROM parent p
INNER JOIN child c ON p.id = c.parent_id";

$parents= query($q);
foreach ($parents as &$parent) {
$children = explode('###', $parent->children);
foreach ($children as &$child){
$child = array_combine(['id','col1','col2','col3'], explode('|#|', $child));
}
$parent->children = $children;
}

本质上是获取带有分隔符的字符串,分解为记录,然后分解为列,并使用硬编码的列名称重新映射列值。

将其留给更简洁的解决方案。

如果没有更好的解决方案,哪个会更有效率。

  • 1 个查询:group_concat,其中 php 将数据处理为所需的结构。
  • n* 个查询:获取所有父级,然后循环遍历它们并获取每个父级的子级。
  • 2 个查询:获取所有父项、获取所有子项、循环并映射它们(当前使用此)

最佳答案

我认为你可以使用GROUP_CONCAT :

SELECT p.parent_id, GROUP_CONCAT(c.child_id) AS childs
FROM parent p
JOIN child c
ON p.parent_id = c.parent_id
GROUP BY p.parent_id

关于php - mysql获取具有可用结构中关系的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38611393/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com