1

ProductCategoryRatingの3 つのテーブルを持つDoctrine2プロジェクトがあります。各製品には 1 つだけのカテゴリがあります。カテゴリには、親と多くの子が含まれる場合があります。各製品には多くの評価があります。

次のクエリを実行します。

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 です。要点は、カテゴリに製品がないにもかかわらず、1 つの結果が報告されるということです。特に、オブジェクトのタイプは 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 docsを読んで、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 に答える