如何从数据库中获取以下数组?

时间:2011-01-22 22:06:31

标签: php sql doctrine doctrine-1.2

好的,让它更清楚: 我正在使用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的第一个后者运行单独的查询。 教义“分层数据”穿过我的脑海,但我相信它的不同之处? 感谢

3 个答案:

答案 0 :(得分:1)

如果您要多次使用此形式的结果,可能需要将格式设置为Hydrator,如described here

在您的情况下,您可以创建一个选择3列

的查询
  1. brand.name
  2. 的第一个字母
  3. brand.name
  4. 计数(product.id)
  5. 然后保湿结果

    $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中表达这个查询,只需要对数组进行水合而不是对象。