1 回答
TA贡献1998条经验 获得超6个赞
您可以在应用程序层中转换数据,以便在结果数组中,您将只有表 a 的行以及相关的类别名称。
首先,您需要一个有序的结果集,例如
select a.id,
a.phone,
a.name,
b.category
from table_1 a
join table_2 b
on a.id = b.table_1_id
order by a.id asc
然后遍历所有记录并烘焙数据集
$result = [];
$currentParent = false;
$data = null;
foreach ($rows as $row) {
/*
* if id is changed then its a different record
* prepare data for new row and create a comma separated string of category names
*/
if ($currentParent != $row['id']) {
if($data != null){ // for first and intermediate rows
$result[]= $data;
}
$data = ['name'=> $row['name'], 'category'=> ''];
$currentParent = $row['id'];
}
$data['category'] = empty($data['category']) ? $row['category']: $data['category'] .", ". $row['category'];
}
$result[]= $data; // add data for last row
echo json_encode($result);
生成的数组将如下所示
Array
(
[0] => Array
(
[name] => item 1
[category] => Cat 1, Cat 2, Cat3
)
[1] => Array
(
[name] => item 2
[category] => Cat 1, Cat 2, Cat3
)
[2] => Array
(
[name] => item 3
[category] => Cat 1, Cat 2, Cat3
)
)
另一种速记方法但不优选是在查询级别应用聚合方法,例如如果您使用 MySQL,您可以使用group_concat
但它有最大字符限制(可调)的限制。
- 1 回答
- 0 关注
- 99 浏览
添加回答
举报