如何合并两个表的数据并将其行扩展为数组?
How do I combine data of two tables and extend in it's row as array?
我想将两个表的数据合并 return 为 json
,但我似乎做不对。我尝试了 INNER/LEFT
加入和嵌套查询,但都没有有效结果。
下面是我的表的结构:
事件:
----------------------------------
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.event
匹配 events.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 中完成此操作?
伪代码,因为我不知道你用什么library/wrapper访问你的数据库:
$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()
returns 数组形式的结果集,如果找不到行则包括一个空数组。
$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);
我想将两个表的数据合并 return 为 json
,但我似乎做不对。我尝试了 INNER/LEFT
加入和嵌套查询,但都没有有效结果。
下面是我的表的结构:
事件:
----------------------------------
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.event
匹配 events.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 中完成此操作?
伪代码,因为我不知道你用什么library/wrapper访问你的数据库:
$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()
returns 数组形式的结果集,如果找不到行则包括一个空数组。
$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);