我有画廊并展示它我需要获得一些信息,如评论数量,评级,收藏等等。我做的事情就像在,但它似乎对我不好。 如何以更好的方式做到这一点?也许有没有办法在一个查询中做到这一点,没有子查询?
我可以添加表格列像评论数量,收藏夹等,但如果出现问题,那么统计数据就不会是真实的。每次计数都更可靠。
$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();
答案 0 :(得分:2)
在大多数情况下,这是可以的。如果你没有数以千计的不同类别,那么你很幸运sql缓存了你的查询和结果。它还取决于计算的每个图像的平均评级量。尝试复制生成的sql查询并在Sql中对其进行基准测试:
EXPLAIN $yourquery
请注意,您应该在用于子查询计算的字段上有索引,这些索引不经常更新(对于图像评级应该是这种情况)。
也许你想查看你的mysql statictics,无论你的query_cache大小是否合适。这实际上取决于项目的规模。
希望能帮到你一点。