1

我有一个包含三个表的Doctrine2项目: ProductCategoryRating。每个产品都有一个且只有一个类别。一个类别可能有一个父级和许多子级。每个产品都有很多评价。

我运行以下查询:

SELECT DISTINCT p, AVG(r.value)*COUNT(r) as globalrating 
FROM AcmeProductBundle:Product p 
JOIN p.ratings r JOIN p.category cat JOIN cat.parent par
WHERE par = '.$categoryID.' OR cat = '.$categoryID.'
ORDER BY globalrating DESC, p.name ASC

其中 $categoryID 是我正在搜索产品的类别的 ID。关键是,尽管该类别中没有产品,但仍会报告一个结果。特别是,该对象的类型是 Acme\ProductBundle\Product 并且在字段中没有值,并且id 是 0!“globalrating”值也是空的!我不明白为什么?

任何的想法?

提前致谢。

4

2 回答 2

0

你能试试这个:

$query = $this->em->createQuery('SELECT DISTINCT p, AVG(r.value)*COUNT(r) as globalrating 
                                 FROM AcmeProductBundle:Product p 
                                 JOIN p.ratings r JOIN p.category cat JOIN cat.parent par
                                 WHERE par = :category OR cat = :category
                                 ORDER BY globalrating DESC, p.name ASC');

$query->setParameter('category', $categoryID);
$returned = $query->getResult();
于 2012-06-25T11:05:55.607 回答
0

我今天回到问题上,我终于找到了问题!

阅读相关的Doctrine 文档,我发现GROUP BY缺少一个子句。因此,正确的DQL 查询是:

SELECT DISTINCT p, AVG(r.value)*COUNT(r) as globalrating 
FROM AcmeProductBundle:Product p 
JOIN p.ratings r JOIN p.category cat JOIN cat.parent par
WHERE par = '.$categoryID.' OR cat = '.$categoryID.'
GROUP BY p.id
ORDER BY globalrating DESC, p.name ASC
于 2013-01-13T10:07:05.843 回答