2012-03-22 24 views
6

Tôi muốn thực hiện SELECT từ kết quả của truy vấn phụ trong DQL. Tương đương với làm như sau trong SQL:Chọn từ truy vấn phụ trong DQL

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

Vấn đề tôi đang chạy vào đó là nó than phiền rằng

Error: Class '(' is not defined 

sự DQL thực tế sản xuất lỗi đó là:

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 

Vì vậy, để nhắc lại, làm cách nào tôi có thể thực hiện lựa chọn từ truy vấn phụ?

Trả lời

5

Sử dụng DQL Tôi khá chắc chắn đó là không thể, nhưng nếu bạn thực sự cần nó, bạn có thể muốn kiểm tra:

Doctrine Native SQL. (examples, permalink từ cùng một trang)

Nó phức tạp hơn nhiều nhưng nó cũng cho phép bạn tự do gửi truy vấn gốc và thực thi nó (phần khó khăn đối với tôi là đối tượng hydrat hóa).

Mặt khác, nếu đoạn mã cuối cùng giống như bất cứ điều gì bạn đang cố gắng để đạt được, có một cách đơn giản hơn mà không cần phụ truy vấn:

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 

Hope this helps ...

+0

truy vấn cuối cùng của tôi cần phải phức tạp hơn một chút, mặc dù tôi không biết bạn có thể sử dụng HAVING như thế để cảm ơn cho mẹo đó! Cuối cùng tôi đã đi với Native SQL và hydration đối tượng. Cảm ơn! – drewag

+3

@drewag và kết quả cuối cùng của bạn với truy vấn gốc sẽ rất thú vị nếu được chia sẻ ở đây. (Tôi biết nó đã được gần 4 năm qua nhưng ...) cảm ơn –

+2

Bạn đã quản lý để giải quyết vấn đề của bạn với hydrat hóa đối tượng một cách sạch sẽ? –

Các vấn đề liên quan