我需要创建一个通用的方法/算法来为这种数据结构创建一个层次结构:
获取结果的查询是这样的:
SELECT
*
FROM
`Posts`
JOIN
`Comments` AS `Comments`
ON
`Posts`.`post_id` = `Categories`.`category_id`
JOIN
`Likes` AS `Likes`
ON
`Comments`.`comment_id` = `Likes`.`comment_id`
我期望的是这样的:
Array
(
[0] => Array
(
[post_id] => 1
[post_message] => Test
[Comments] => Array
(
[0] => Array
(
[comment_id] => 1
[post_id] => 1
[comment_message] => Foo
[Likes] => Array
(
[0] => Array
(
[like_id] => 1
[comment_id] => 1
)
[1] => Array
(
[like_id] => 2
[comment_id] => 1
)
)
)
[1] => Array
(
[comment_id] => 2
[post_id] => 1
[comment_message] => Bar
[Likes] => Array
(
[0] => Array
(
[like_id] => 3
[comment_id] => 2
)
)
)
)
)
)
所以我的问题是: 有没有使用 PDO 的简单方法?我可以手动遍历数组,从 information_schema 中获取键,然后创建子数组,还有更多子数组……,但这感觉就像再次手动编写连接。
我注意到,调用 PdoStatements fetchAll() 时可以使用一个常量:
$statement->fetchAll(PDO::FETCH_ASSOC | PDO::FETCH_GROUP);
这将在某种程度上对数据进行分组,但不是我想要的方式。
那么这个(或类似的东西)是否有一个常量,或者你知道任何聪明的 fetchAll 回调,可以做到这一点?