Symfony Doctrine从4个表中选择AVG

时间:2015-05-02 19:17:32

标签: php mysql symfony doctrine-orm doctrine

我建立了一个系统,用户可以根据评分从0到100评价书籍。通过几个评分,每本书获得平均分数(例如:1423个评分中的88分)。另外,从理论上讲,我应该能够得到一份由作者所写的所有书籍的平均分数排序的作者名单(例如:作者写了54本书,54本书的总体平均分为74分,这是基于每本书平均分数的平均分数。)

我不知道这对你来说是否太混乱了,所以我会告诉你我的桌子:

  • 用户:id,其他数据
  • 书籍:id,其他数据
  • 作者:id,其他数据
  • 评级:user_id,book_id,得分,其他数据
  • 作者:book_id,author_id,其他数据

因此,用户,书籍和作者是单一实体。评级和作者是用于关联单个实体的中间表(一本书可以收到多个评级,一本书可以由多位作者撰写)。用户实际上并不是我所要求的,但我想告诉你,这样你就可以更好地理解。

最后,如果我想检索按每位作者所写的所有书籍的全球平均分数排序的作者列表,我应该如何在Symfony Doctrine中编写查询?

我怀疑我至少需要3个内连接,但我无法解决这个问题。

编辑:找到解决方案

在重新思考问题之后,我得出的结论是,我不需要做其他平均值的平均值,我应该平均对所有作者的所有评分进行评分。使用这种方法,我只需要3个表来执行我的查询:

SELECT AVG(Rating.score) FROM Rating, Author, Authors WHERE Rating.book_id = Authors.book_id AND Authors.author_id = Author.id AND Author.id = $author_id;

将其解析为Doctrine非常有效(显然可以使用实体字段更改列名)。

0 个答案:

没有答案