为了账号安全,请及时绑定邮箱和手机立即绑定

MySQL选择多维?

MySQL选择多维?

PHP
宝慕林4294392 2021-07-02 14:00:44
我想从我的数据库中选择所有帖子及其附件。这是带有虚拟数据的结构:帖子表id       | post          | userId   | ---------|---------------|----------|1        | "hello"       |  1       |2        | "world"       |  1       |3        | "ouch"        |  2       |4        | "test"        |  1       |附件表id       | postId        | fileName |  time    | ---------|---------------|----------|----------|1        | 1             |"hey.jpg" |        0 |2        | 1             |"test.png"| 53252354 |3        | 2             |"asd.png" |        0 |4        | 4             |"asd2.png"|        0 |到目前为止,我的代码看起来像这样,但我并没有真正得到我想要的。$qry = $db->prepare('SELECT p.id     , p.post     , p.userId     , att.fileName     , att.time  FROM posts p  LEFT   JOIN attachments att     ON att.postId = p.id');$qry->execute();$postsArray = $qry->fetchAll(PDO::FETCH_ASSOC);我想要这样的东西:[{'id': 1,'post': 'hello','userId': 1,'attachments': [{'fileName': 'hey.jpg', 'time:' 0}, ... ]}, ... ]我怎么能做到这一点?
查看完整描述

2 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

您的查询将为您提供所需结果的正确数据,您可以在 PHP 中进行后处理以获得所需的格式:


foreach ($postArray as $post) {

    $fixed_part = array('id' => $post['id'], 'post' => $post['post'], 'userId' => $post['userId']);

    $key = serialize($fixed_part);

    if (!isset($out[$key])) $out[$key] = $fixed_part;

    $out[$key]['attachments'][] = array('fileName' => $post['fileName'], 'time' => $post['time']);

}

$out = array_values($out);

echo json_encode($out, JSON_PRETTY_PRINT);

输出太长无法发布,但可以在此演示中看到。查询结果可以在dbfiddle看到


查看完整回答
反对 回复 2021-07-09
  • 2 回答
  • 0 关注
  • 163 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信