我有以下具有以下值的2表:
tbl_brand
ID名称
1个苹果
2三星
tbl_products
ID brand_id p_name
1个1移动
2个1 Earpods
3 2移动
选择’b’.’id’作为’brand_id’,’b’.’name’作为’brand_name’,’p’.’p_name’作为’product_name’FROM’tbl_brand”b’左联接’tbl_products”p ‘ON’p’.’brand_id’=’b’.’id’
并打印结果,得到以下数组:
Array
(
[0] => stdClass Object
(
[brand_id] => 1
[brand_name] => Apple
[product_name] => Mobile
)
[1] => stdClass Object
(
[brand_id] => 1
[brand_name] => Apple
[product_name] => Earpods
)
[2] => stdClass Object
(
[brand_id] => 2
[brand_name] => Samsung
[product_name] => Mobile
)
一切正常.但是我正在寻找的结果是这样的:
Array
(
[0] => stdClass Object
(
[brand_id] => 1
[brand_name] => Apple
[product_name] => stdClass Object
(
[0] => Mobile
[1] => Earpods
)
)
[1] => stdClass Object
(
[brand_id] => 2
[brand_name] => Samsung
[product_name] => Mobile
)
我想根据brand_id键对数据进行分组.我怎样才能做到这一点 ?
解决方法:
尽管您可以在单个循环中生成所需的数组,但我宁愿执行两个查询.首先,将所有品牌放入一个阵列,然后向每个品牌添加一个空的产品阵列.然后获取所有产品并将其分配给相关品牌.
$data = [];
$brandResult = $db->query("SELECT id, name FROM tbl_brand");
while ($row = $brandResult->fetchObject()) {
$row->product_names = [];
$data[$row->id] = $row;
}
$productResult = $db->query("SELECT id, brand_id, p_name FROM tbl_products");
while ($row = $productResult->fetchObject()) {
$data[$row->brand_id][$row->id] = $row->p_name;
}