2012-03-22 102 views
6

我想從DQL中的子查詢結果中執行SELECT。在SQL執行以下操作等效:從DQL中的子查詢中選擇

SELECT * FROM (SELECT foo1,foo2 FROM bar) where foo1='something'; 

我遇到的問題是,它抱怨說

Error: Class '(' is not defined 

,它產生錯誤的實際DQL是:

SELECT u FROM (
    SELECT u, COUNT(u) as total 
     FROM Utterance u LEFT JOIN u.recordings r 
     WHERE r.speaker IS NULL OR r.speaker <> 5 
     GROUP BY u.id 
    ) matched WHERE total < 5 

所以要重申,我如何從子查詢中執行選擇?

回答

5

使用DQL我敢肯定這是不可能的,但如果你真的需要它,你可能要檢查:

Doctrine Native SQL。 (examples,來自同一頁的永久鏈接)

它更加複雜,但它也給你發送原生查詢和執行它的自由(對我來說,棘手的部分是對象水合)。

在另一方面,如果任何事情你想達到什麼樣的最後一個代碼段類似,存在需要無子查詢一個簡單的方法:

SELECT u 
    FROM Utterance u LEFT JOIN u.recordings r 
    WHERE r.speaker IS NULL OR r.speaker <> 5 
    GROUP BY u.id HAVING COUNT(u) < 5 

希望這有助於...

+0

我的最終查詢需要比這更復雜一點,雖然我不知道你可以像這樣使用HAVING,所以謝謝你的提示!最後,我使用了Native SQL和對象水合。謝謝! – drewag 2012-03-23 22:20:48

+3

@drewag,如果在此處共享,則使用本機查詢的最終結果將非常有趣。 (我知道它已經差不多4年了,但是...)謝謝 – 2015-12-18 11:16:10

+2

你是否設法以一種乾淨的方式解決了對象水合問題? – 2016-04-12 17:56:56