我的任务是从数据库中选择具有该品牌最高订单价值的品牌和客户(以及订单价值)。
我想出了一个问题:
$ordersQuery = $em->createQuery(
"SELECT b.name AS brand, c.name, MAX(DISTINCT o.value) AS total
FROM AppBundle:VOrder o
LEFT JOIN o.brand b
LEFT JOIN o.customer c
GROUP BY b.id, c.id"
); 查询的结果如下所示:
品牌1(客户号5-7.00) 品牌1(客户号27-35.00) 品牌1(客户号32- 169.00 ) 品牌1(客户编号38- 101.00 ) 品牌2(客户编号334- 21.00 ) 品牌2(客户号344-61.00) 品牌2(客户编号364-159.00) 品牌2(客户编号427- 170.00 )
正如你所看到的,每个品牌都有很多记录。
如何修改我的查询,以便只显示每个品牌(与客户一起)的最高订单值的一条记录?
发布于 2015-03-04 10:04:52
我认为用DQL执行它是不可能的,但是您可以这样做原始查询:
SELECT t1.maxvalue, b.name AS brand, c.name
FROM VOrder o
JOIN (
SELECT MAX(DISTINCT value) as maxvalue, brandId
FROM VOrder
GROUP BY brandId
) as t1 ON (o.value = maxvalue AND o.brandId = t1.brandId)
LEFT JOIN brand b ON (...)
LEFT JOIN customer c ON (...)您可以使用new Doctrine_RawSql()构建它。
https://stackoverflow.com/questions/28850313
复制相似问题