sql >> Database teknologi >  >> RDS >> Mysql

Doktrinforespørgselssprog få Max/Seneste række pr. gruppe

Den forespørgsel, du forsøger at gøre med doktrin, er relateret til . For at bruge en underforespørgsel og derefter slutte sig til hovedforespørgslen, bliver tingene komplicerede at håndtere med doktrin. Så nedenfor er den omskrevne SQL-version for at få de samme resultater uden brug af samlede funktioner:

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

Det er nemt at konvertere ovenstående forespørgsel svarende til doktrin eller DQL, nedenfor er DQL-versionen af ​​ovenstående 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

Eller med query builder kan du skrive noget som jeg har testet nedenfor med symfony 2.8 ved at bruge DEMO-skema

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

En anden idé ville være at oprette en visning ved hjælp af din forespørgsel i databasen, og i symfony opret en enhed, læg visningsnavnet i tabelannotering og begynd bare at kalde din enhed, det vil give resultaterne returneret af din forespørgsel, men denne tilgang anbefales ikke, bare en midlertidig rettelse .



  1. Benchmarking af manuelle databaseimplementeringer vs. automatiserede implementeringer

  2. FEJL:funktioner i indeksudtryk skal markeres IMMUTABEL i Postgres

  3. DATEADD-ækvivalent i PostgreSQL

  4. Hvordan indsætter man arabiske tegn i SQL-databasen?