2016-12-31 42 views
0

我有一个审查实体包含的字段:子查询中的symfony

id 
userID 
bookID 
review 

再评级实体包含的字段:

id 
reviewID 
userID 
rating 

的评级可能能够储存0或1。

我该如何使用symfony执行一个查询,以计数等于1的评级表中的所有评级,然后计数等于0的评级,然后减去来自c的0评级的计数ount为1评级,并返回每个审查?

我该怎么做?似乎是一个非常棘手的一个

+0

您的实体是以某种方式相关? (OneToMany/MenyToOne关系) – Preciel

+0

@Preciel是一对多和多对一的 – KTOV

+0

然后你可以发布你的实体文件PLZ ?!我没有看到它们与如此少的数据有什么联系......否则,你的问题没有什么困难,这一切都发生在树枝上,你会做一些像'{%for review in review.rating%}'然后循环评分...我会发布一个完整的答复,当你的问题将被更新(或别人也许如果比我快) – Preciel

回答

0

好吧,因为你正在使用Symfony我假设你也使用Doctrine。

原则允许您执行原生查询。看看如何执行本机查询here。 在MySQL上,你可以执行子查询,看看如何做到这一点here

然后尝试这样的事:

SELECT rv.* , ((SELECT count(*) FROM ratings ra WHERE ra.rating = 1 AND id rv.id = ra.reviewID) - (SELECT count(*) FROM ratings ra WHERE ra.rating = 0 AND id rv.id = ra.reviewID)) as result FROM review rv;

对如何让附着在实体值一看here

+0

如果你确实阅读了评论,你应该明白,不需要你刚刚提出的内容......只要实体彼此相关,Symfony就会进行子查询......为了上帝的缘故,使用DQL ... [这里](http://stackoverflow.com/questions/41293878/make-an-iterable-array-of-objects-in-php-for-twig)你可以找到一个很好的例子DQL我不久前写了 – Preciel

+0

@Preciel gragonmau的回答是正确的。 KTOV需要使用Doctrine来做他想做的事情!虽然我认为KTOV需要澄清他实际需要的确切查询。 –

+0

@KTOV有什么方法可以使用DQL应用计数函数? 通常,当执行这种计算字段时,我更喜欢在数据库大小而不是PHP端进行。数据库倾向于更加准备处理这种操作,而不是Web服务器,有时可能会导致性能问题。这就是为什么我建议使用Native Query而不是DQL。 – gragonmau