好的,让它更清楚: 我正在使用doctrine
我有一个表品牌和产品
Brand
id
name
Product
id
name
brand_id
我在数据库中有很多这些品牌的品牌和产品。 我想检索Brand.name的第一个品牌名单(+产品数量)。
ex:
array(
n => array(
0 => array('Nike', 4 ),
1 => array('North Pole', 18)
.....
)
.....
)
所以我的问题是可以通过一个有效的查询来完成。 我真的不想为每个brand.name的第一个后者运行单独的查询。 教义“分层数据”穿过我的脑海,但我相信它的不同之处? 感谢
答案 0 :(得分:1)
如果您要多次使用此形式的结果,可能需要将格式设置为Hydrator,如described here。
在您的情况下,您可以创建一个选择3列
的查询然后保湿结果
$results = $q->execute(array(), 'group_by_first_column');
答案 1 :(得分:0)
您无法以这种方式从数据库中获取它,但您可以将数据作为对象或数组获取,然后将其转换为所描述的形式。使用foreach循环。
答案 2 :(得分:0)
使用Doctrine时,您还可以使用原始SQL查询和水合数组而不是对象。所以我的解决方案是使用本机SQL查询:
SELECT
brand.name,
count(product.id)
FROM
brand
JOIN
product ON
brand.id=product.brand_id
GROUP BY
brand.id ORDER BY brand.name;
然后在PHP上迭代结果以构建所需的数组。因为结果是按Brand Name
排序的,所以这很容易。如果你不保留数据库抽象,我认为也应该可以在DQL中表达这个查询,只需要对数组进行水合而不是对象。