Symfony - 从多个表中选择

时间:2012-01-07 19:47:01

标签: optimization select symfony1

我有画廊并展示它我需要获得一些信息,如评论数量,评级,收藏等等。我做的事情就像在,但它似乎对我不好。 如何以更好的方式做到这一点?也许有没有办法在一个查询中做到这一点,没有子查询?

我可以添加表格列像评论数量,收藏夹等,但如果出现问题,那么统计数据就不会是真实的。每次计数都更可靠。

$images = $this->getDoctrine()->getEntityManager()
    ->createQuery('SELECT img
    FROM AcmeMainBundle:Image img
    WHERE img.category = :category
    ORDER BY img.order ASC, img.id DESC')
    ->setParameter('category', $category)
    ->getResult();



$comments = $this->getDoctrine()->getEntityManager()
    ->createQuery('SELECT i.id, COUNT(i.id) as c_count
    FROM AcmeMainBundle:ImgComment c
    JOIN c.image i
    WHERE i.category = :category
    GROUP BY c.image')
    ->setParameter('category', $category)
    ->getResult();      



$ratings = $this->getDoctrine()->getEntityManager()
    ->createQuery('SELECT i.id, SUM(r.rating) as suma, COUNT(r.rating) as votes
    FROM AcmeMainBundle:ImgRating r
    JOIN r.image i
    WHERE i.category = :category
    GROUP BY r.image')
    ->setParameter('category', $category)
    ->getResult();

1 个答案:

答案 0 :(得分:2)

在大多数情况下,这是可以的。如果你没有数以千计的不同类别,那么你很幸运sql缓存了你的查询和结果。它还取决于计算的每个图像的平均评级量。尝试复制生成的sql查询并在Sql中对其进行基准测试:

EXPLAIN $yourquery

请注意,您应该在用于子查询计算的字段上有索引,这些索引不经常更新(对于图像评级应该是这种情况)。

也许你想查看你的mysql statictics,无论你的query_cache大小是否合适。这实际上取决于项目的规模。

希望能帮到你一点。