sql >> Databáze >  >> RDS >> Mysql

Doctrine Query Language získat maximální/nejnovější řádek na skupinu

Dotaz, který se pokoušíte provést pomocí doktríny, souvisí s . Chcete-li použít dílčí dotaz a poté se připojit k hlavnímu dotazu, zkomplikuje se manipulace s doktrínou. Níže je tedy přepsaná verze SQL pro získání stejných výsledků bez použití jakýchkoli agregačních funkcí:

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

Převést výše uvedený dotaz ekvivalentní doktrínu nebo DQL je snadné, níže je verze DQL výše uvedeného 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

Nebo pomocí nástroje pro tvorbu dotazů můžete napsat něco, co jsem testoval níže se symfony 2.8 pomocí DEMO schéma

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

Dalším nápadem by bylo vytvořit pohled pomocí vašeho dotazu v databázi a v symfony vytvořit entitu, vložte název pohledu do anotace tabulky a začněte volat vaši entitu, poskytne výsledky vrácené vaším dotazem, ale tento přístup se nedoporučuje, pouze dočasná oprava .



  1. Instalace PostgresSQL se nezdařila:Inicializace databázového clusteru se nezdařila MAC OS

  2. Jak odeslat požadavek POST s daty formuláře a parametry v PL/SQL

  3. Jak mohu vybrat ze seznamu hodnot v SQL Server

  4. Úvod do SQL Server Identity