如何使用 PDO 从 PHP 中的单个 select 语句将孩子分配给父母?

Posted

技术标签:

【中文标题】如何使用 PDO 从 PHP 中的单个 select 语句将孩子分配给父母?【英文标题】:How do I assign children to parents from a single select statement in PHP using PDO? 【发布时间】:2021-12-21 19:08:50 【问题描述】:

我正在尝试使用单个 select 语句从我的数据库中获取父母和孩子。父母的父母ID为0,孩子的父母ID对应于父母的分配ID。

这就是我的桌子目前的样子

id      parent_id     title
10      0             TREES
11      0             FLOWERS
12      10            PINE
13      10            WALNUT
14      10            GIANT SEQUOIA
15      11            ROSE
16      11            ORCHIDS
17      10            CACAO

我可以做一个简单的:

SELECT * FROM earth WHERE parent_id = 0

然后循环遍历结果并获取孩子

SELECT * FROM earth WHERE parent_id = :id_from_parent

但我想知道是否有可能(更有效的方式)通过单个 select 语句和使用来实现它。

fetchAll(PDO::FETCH_GROUP)

当我使用 fetch group 时,我确实得到了这些组,但是父母被设置在他们自己的类别 0 中,然后孩子们按他们的父母类别分组。

【问题讨论】:

【参考方案1】:

您可以使用此查询一次获取每个父母的所有孩子:

SELECT e1.title AS parent, e2.title AS child
FROM earth e1
JOIN earth e2 ON e2.parent_id = e1.id
ORDER BY e1.id

当与PDO::FETCH_COLUMN|PDO::FETCH_GROUP 一起使用时,这会给你一个类似的结果

array('TREES' => array('WALNUT','GIANT SEQUOIA','CACAO','PINE'),
      'FLOWERS' => array('ORCHIDS','ROSE')
     )

【讨论】:

以上是关于如何使用 PDO 从 PHP 中的单个 select 语句将孩子分配给父母?的主要内容,如果未能解决你的问题,请参考以下文章

PHP/PDO/MySQL:将多个查询转换为单个查询

在 PHP (PDO) 中了解 MySQL 的内存使用情况

如何使用 PDO 从 php 文件中插入数据?

如何使用 PHP PDO 解析 MySQL 数据库中的对象数据?

如何使用 php pdo 中的 2 个表获取 1 个表用户详细信息?

PHP 的 PDO 可以限制为单个查询吗?