【问题标题】:How do I combine data of two tables and extend in it's row as array?如何组合两个表的数据并在其行中扩展为数组?
【发布时间】:2016-02-06 04:17:34
【问题描述】:

我想合并两个表的数据并将其返回为json,但我似乎无法正确处理。我已经尝试过 INNER/LEFT Join 和嵌套查询,但都没有有效的结果。

这是我的表格的结构:

事件:

----------------------------------
id |  title   | extra1 | extra2
----------------------------------
 1 | EventNo1 |  ...   |  ...
 2 | EventNo2 |  ...   |  ...
 3 | EventNo3 |  ...   |  ...
 4 | EventNo4 |  ...   |  ...
 5 | EventNo5 |  ...   |  ...

图片:

----------------------------------
id | event | val | height | width
----------------------------------
 2 |   5   | xxx |  xxx   |  xxx
 3 |   2   | xxy |  xxx   |  xxx
 6 |   5   | xyx |  xxx   |  xxx

所以基本上我想要的是从events 获取数据,对于images.eventevents.id 匹配的每个事件,我想使用来自images 的数据进行扩展。

这是我想要实现的json结果:

[
  {
    "id": "1",
    "title": "EventNo1",
    "extra1": "...",
    "extra2": "...",
    "images": []
  },
  {
    "id": "2",
    "title": "EventNo2",
    "extra1": "...",
    "extra2": "...",
    "images": [
      {
        "id": 3,
        "val": "xxy",
        "height": "xxx",
        "width": "xxx"
      }
    ]
  },
  {
    "id": "3",
    "title": "EventNo3",
    "extra1": "...",
    "extra2": "...",
    "images": []
  },
  {
    "id": "4",
    "title": "EventNo4",
    "images": []
  },
  {
    "id": "5",
    "title": "EventNo5",
    "extra1": "...",
    "extra2": "...",
    "images": [
      {
        "id": 2,
        "val": "xxx",
        "height": "xxx",
        "width": "xxx"
      },
      {
        "id": 6,
        "val": "xyx",
        "height": "xxx",
        "width": "xxx"
      }
    ]
  }
]

我如何在 php + mysqli 中完成这个?

【问题讨论】:

  • 没错。到目前为止,您尝试过什么?
  • 我接受了“gaurav rai”。我之前尝试过他的方法,但是我的对象是分开的。没想到只是扩展它们,这让我考虑改为 INNER/LEFT 加入......

标签: php arrays mysqli left-join inner-join


【解决方案1】:

伪代码,因为我不知道您使用什么库/包装器来访问您的数据库:

$query = "select * from events";
$rows = $db->query($query);

foreach($rows as $k => $row) {
  $query = "select * from images where event = ".$row['id'];
  $rows[$k]['images'] = $db->query($query);
}

echo json_encode($rows);

这是假设$db->query()以数组的形式返回结果集,如果没有找到行,则包括一个空的。

【讨论】:

    【解决方案2】:
    $q = "select * from events";
    $res = mysql_query($q);
    while($row = mysql_fetch_assoc($res)){
     $image_data= array();
     $q2 = "select * from images where event = ".$row['id'];
     $res2 = mysql_query($q2);
     while($row2 = mysql_fetch_assoc($res2)){
     $image_data[] = $row2;
     }
     $row['images'] = $image_data;
     $event_data[] = $row;
    }
    echo json_encode($event_data);
    

    【讨论】:

    • 该死,我比我想象的要近。我已经尝试过你的方法,但是我在一个单独的对象中有“图像”。没想到只是用 "$row['images'] = $image_data;" 来扩展它非常感谢! :)
    猜你喜欢
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2021-07-16
    相关资源
    最近更新 更多