如何使用 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 数据库中的对象数据?