【问题标题】:DQL OneToMany query and performing averageDQL OneToMany 查询和执行平均
【发布时间】:2015-11-26 18:03:07
【问题描述】:

在实体之间的OneToMany 关系中:

  • Composer > Soundtrack
  • Soundtrack > SoundtrackRating

我想通过给定的Composer 选择每个Soundtrack 并为每个Soundtrack 平均SoundtrackRatings

DQL:

SELECT s.name, (SUM(r.rating)/COUNT(r.rating)) AS rating 
FROM Soundtrack AS s 
LEFT JOIN SoundtrackRating AS r 
WHERE s.composer = :composer AND r.soundtrackId = s.id 
GROUP BY s.id 
ORDER BY rating DESC

然后我传递:composer 类型为Composer 的实例:

$em->createQuery($dql)
  ->setParameter('composer', $composer)
  ->getResult();

但是,在查询结果中,我得到了所有 Soundtrack 条目,无论 $composer 我作为参数传递什么。唯一的区别是仅对给定$composer 的评分进行平均,其余为0 的平均评分。

这个查询的问题在哪里?

【问题讨论】:

    标签: symfony doctrine dql


    【解决方案1】:

    想通了。从WHERE 子句中删除r.soundtrackId = s.id 并在LEFT JOIN 中使用WITH

    SELECT s.name, (SUM(r.rating)/COUNT(r.rating)) AS rating 
    FROM Soundtrack AS s 
    LEFT JOIN SoundtrackRating AS r WITH r.soundtrackId = s.id
    WHERE s.composer = :composer 
    GROUP BY s.id 
    ORDER BY rating DESC
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      相关资源
      最近更新 更多