आप सिद्धांत के साथ जो प्रश्न करने का प्रयास कर रहे हैं, वह सबसे बड़ा-एन-प्रति-समूह . उप क्वेरी का उपयोग करने के लिए और फिर मुख्य क्वेरी के साथ जुड़ने के लिए सिद्धांत के साथ चीजों को जटिल बनाना। तो नीचे किसी भी समग्र कार्यों के उपयोग के बिना समान परिणाम प्राप्त करने के लिए फिर से लिखा गया SQL संस्करण है:
SELECT
a.*
FROM
score a
LEFT JOIN score b
ON a.name = b.name
AND a.score < b.score
WHERE b.score IS NULL
ORDER BY a.score DESC
उपरोक्त क्वेरी को सिद्धांत या DQL के समकक्ष परिवर्तित करना आसान है, नीचे उपरोक्त SQL का DQL संस्करण है:
SELECT a
FROM AppBundle\Entity\Score a
LEFT JOIN AppBundle\Entity\Score b
WITH a.name = b.name
AND a.score < b.score
WHERE b.score IS NULL
ORDER BY a.score DESC
या क्वेरी बिल्डर के साथ आप कुछ लिख सकते हैं जैसे मैंने सिम्फनी 2.8 के साथ नीचे परीक्षण किया है डेमो स्कीमा
$DM = $this->get( 'Doctrine' )->getManager();
$repo = $DM->getRepository( 'AppBundle\Entity\Score' );
$results = $repo->createQueryBuilder( 'a' )
->select( 'a' )
->leftJoin(
'AppBundle\Entity\Score',
'b',
'WITH',
'a.name = b.name AND a.score < b.score'
)
->where( 'b.score IS NULL' )
->orderBy( 'a.score','DESC' )
->getQuery()
->getResult();
एक और विचार डेटाबेस में आपकी क्वेरी का उपयोग करके एक दृश्य बनाना होगा और सिम्फनी में एक इकाई बनाएं, दृश्य नाम को टेबल एनोटेशन में रखें और बस अपनी इकाई को कॉल करना शुरू करें, यह आपकी क्वेरी द्वारा लौटाए गए परिणाम देगा लेकिन यह दृष्टिकोण केवल एक अस्थायी सुधार की अनुशंसा नहीं की जाती है ।