Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Doctrine Query Language pobierz maks./najnowszy wiersz na grupę

Zapytanie, które próbujesz zrobić z doktryną, jest powiązane z . Użycie zapytania podrzędnego, a następnie połączenie z zapytaniem głównym, komplikuje sprawę z doktryną. Poniżej znajduje się przepisana wersja SQL, aby uzyskać te same wyniki bez użycia jakichkolwiek funkcji agregujących:

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

Konwertowanie powyższego zapytania na doktrynę lub DQL jest łatwe, poniżej znajduje się wersja powyższego SQL w 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

Lub za pomocą kreatora zapytań możesz napisać coś takiego, jak testowałem poniżej z symfony 2.8, używając Schemat DEMO

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

Innym pomysłem byłoby utworzenie widoku za pomocą zapytania w bazie danych i utworzenie encji w symfony umieść nazwę widoku w adnotacji tabeli i po prostu zacznij wywoływaćswój encję da wyniki zwrócone przez zapytanie ale to podejście nie jest zalecane tylko jako tymczasowe rozwiązanie .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zwrócić lewą lub prawą część ciągu w MySQL

  2. Jak zainstalować MySQL Workbench w systemie Windows

  3. Jak utworzyć histogram w MySQL?

  4. MySQL w 2018 roku:co jest w wersji 8.0 i inne obserwacje

  5. Jak zautomatyzować migrację z samodzielnego MySQL do klastra Galera za pomocą Ansible