2012-03-22 15 views
6

DQL'de bir alt sorgunun sonuçlarından SELECT yapmak istiyorum. SQL aşağıdakileri yapmanın eşdeğeri:Alt sorgudan seçerek 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 

:

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

İçine çalıştırıyorum sorun bu hatayı üretir

Error: Class '(' is not defined 

gerçek DQL olduğunu şikayet olmasıdır Tekrarlamak gerekirse, bir alt sorgudan nasıl seçim yapabilirim? DQL kullanma

cevap

5

Ben bu mümkün değil eminim ama gerçekten ihtiyacınız olmadığını kontrol etmek isteyebilirsiniz:

Doctrine Native SQL. (examples, aynı sayfadan permalink)

Çok daha karmaşık ama aynı zamanda yerel sorgu gönderme ve yürütme özgürlüğü de veriyor (benim için zor olan kısım nesne hidrasyonuydu). Öte yandan

, son kod segmenti size ulaşmak istediğiniz şeyi şey benziyorsa, hiçbir alt sorguları gerektiren daha basit bir yolu vardır: Bu yardımcı olur

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 

Umut ...

+0

Son sorgunun bundan daha da karmaşık olması gerekiyordu, bununla birlikte HAVING'i bu şekilde kullanabileceğinizi bilmiyordum. Sonunda Yerli SQL ve nesne hidrasyon ile gittim. Teşekkürler! – drewag

+3

@drewag, ve burada paylaşılan yerel sonuç ile son sonucu çok ilginç olacaktır. (Biliyorum neredeyse 4 yıl geçti ama ...) teşekkürler –

+2

Sorununuzu nesnel hidrasyon ile temiz bir şekilde çözmeyi başardınız mı? –

İlgili konular