2016-12-31 56 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