sql >> Databasteknik >  >> RDS >> Mysql

Doctrine Query Language få max/senaste raden per grupp

Frågan du försöker göra med doktrin är relaterad till . Att använda en underfråga och sedan gå med i huvudfrågan blir det komplicerat att hantera med doktrin. Så nedan är den omskrivna SQL-versionen för att få samma resultat utan användning av några aggregerade 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

Att konvertera ovanstående fråga som motsvarar doktrin eller DQL är enkelt, nedan är DQL-versionen av ovanstå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 frågebyggaren kan du skriva något som jag har testat nedan med symfony 2.8 med 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();

En annan idé skulle vara att skapa en vy med hjälp av din fråga i databasen och i symfony skapa en entitet, lägg vynnamnet i tabellkommentaren och börja bara ringa din entitet, det kommer att ge resultaten som returneras av din fråga, men detta tillvägagångssätt rekommenderas inte bara en tillfällig fix .



  1. Hur använder man COUNT i SQL?

  2. Vad är standardbegränsningsnamnet i PostgreSQL?

  3. Hämta ID för en infogat post:Php &MS SQL SERVER

  4. SQL-fråga för att hämta data för de senaste 3 månaderna