我在创建SQL查询时遇到问题。
我有2个输入,YouTubeVideo和Views。
YouTubeVideo可以有很多视图,视图在ViewsCount属性下被视为视图的“包”。
现在,假设我有1个YouTubeVideo,包含3个观看次数。 视图[0] .ViewsCount = 200; 视图[1] .ViewsCount = 100; 视图[2] .ViewsCount = 300; 总数将是600。
我如何构建一个查询,查询所有youtube视频并按照他们拥有的总观看次数对其进行排序?
是否可以在SQL中执行此数学运算?
Atm看起来像这样:
$repository = $this->em->getRepository('YTScraperBundle:YouTubeVideo');
$query = $repository->createQueryBuilder('p');
$query->setMaxResults(self::PR_PAGE);
$query->setFirstResult($firstResult);
$query = $query->getQuery();
$youTubeVideos = $query->getResult();
// foreach ($youTubeVideos as $youTubeVideo ... get all views add them etc.
然后我正在使用usort:
usort($youTubeVideos, array('YT\ScraperBundle\Entity\YouTubeVideo', "compareViews"));
但这根本不理想,因为我对查询使用限制。
答案 0 :(得分:0)
您可以尝试使用DQL而不是注释。
SELECT y FROM YoutubeVideos y JOIN y.views v GROUP BY y.id ORDER BY SUM(v.viewCount)