sql >> Database >  >> RDS >> Mysql

Doctrine Query Language krijgt Max/Laatste rij per groep

De vraag die u probeert te doen met doctrine is gerelateerd aan . Om een ​​subquery te gebruiken en vervolgens samen te voegen met de hoofdquery, moet u ingewikkelde zaken oplossen met doctrine. Dus hieronder is de herschreven SQL-versie om dezelfde resultaten te krijgen zonder gebruik van statistische functies:

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 

DEMO

Het is eenvoudig om bovenstaande query te converteren naar doctrine of DQL, hieronder vindt u de DQL-versie van bovenstaande SQL:

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

Of met de querybuilder kun je iets schrijven zoals ik hieronder heb getest met symfony 2.8 met behulp van de DEMO-schema

$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();

Een ander idee zou zijn om een ​​weergave te maken met behulp van uw query in de database en in symfony een entiteit te maken, de weergavenaam in de tabelannotatie te plaatsen en gewoon uw entiteit te bellen, het geeft de resultaten die door uw query worden geretourneerd, maar deze aanpak wordt niet aanbevolen, slechts een tijdelijke oplossing .



  1. Ik kan niet meerdere afbeeldingen instellen in rasterweergave?

  2. Hoe te SELECTEREN UIT opgeslagen procedure

  3. Controleer of de tabel bestaat of niet voordat u deze in Oracle maakt

  4. Android Room Embedded Relation negeert SQL waar voorwaarde