You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

一对多关系查询时如何将多端数据以数组形式整合返回?

方案结论

这个需求既可以通过SQL直接实现,也可以通过PHP处理查询结果实现,两种方案各有适用场景。

方案1:通过SQL直接实现

MySQL 5.7及以上版本支持JSON聚合函数,可以直接返回聚合后的帖子JSON串:

SELECT 
  u.id,
  u.name,
  JSON_ARRAYAGG(
    JSON_OBJECT(
      'post_id', p.id,
      'title', p.title
    )
  ) AS posts
FROM users u 
INNER JOIN posts p ON u.id = p.user_id 
WHERE u.id = :id
GROUP BY u.id, u.name

查询得到的posts字段是JSON格式字符串,在PHP中用json_decode($row['posts'], true)即可转成关联数组,得到你要的结构。
注意:该方案依赖MySQL的JSON函数,低版本数据库无法使用,且大数量下聚合性能不如PHP处理稳定。

方案2:通过PHP处理查询结果(更推荐)

该方案兼容性最高,不依赖数据库版本,性能可控。你可以继续使用原来的SQL查询,拿到返回的行数据后通过简单遍历重组即可:

// $rows 为你原SQL查询得到的二维数组结果
$formatted = [];
foreach ($rows as $item) {
    $uid = $item['id'];
    if (!isset($formatted[$uid])) {
        $formatted[$uid] = [
            'id' => $uid,
            'name' => $item['name'],
            'posts' => []
        ];
    }
    $formatted[$uid]['posts'][] = [
        'post_id' => $item['post_id'],
        'title' => $item['title']
    ];
}
// 重置外层数组键为数字索引,符合你期望的输出结构
$result = array_values($formatted);

日常开发更推荐该方案,排查问题更方便,不需要适配数据库的特殊语法。


内容的提问来源于stack exchange,提问作者user_411

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 01:36:11