교리 쿼리 언어를 사용하여 그룹당 최대 또는 최신 행을 효율적으로 찾는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-20 19:00:20
원래의
852명이 탐색했습니다.

How to Efficiently Find the Maximum or Latest Row Per Group Using Doctrine Query Language?

교리 쿼리 언어: 그룹당 최대 또는 최신 행 찾기

일부 데이터베이스 작업에서는 최대 또는 최신 행을 쿼리해야 합니다. 데이터 그룹 내의 행. 이러한 작업을 수행하는 SQL 문을 DQL(Doctrine Query Language)로 변환하려면 특정 기술을 활용해야 합니다.

일반적인 SQL 기술 중 하나는 하위 쿼리를 사용하여 그룹 내 최고 또는 최신 값을 확인한 다음 조인하는 것입니다. 해당 결과가 포함된 기본 쿼리입니다. 그러나 Doctrine의 경우 이러한 접근 방식이 복잡해질 수 있습니다.

대체 솔루션은 집계 함수를 사용하지 않도록 SQL 문을 다시 작성하는 것입니다. 예를 들어 이름별로 가장 높은 점수를 찾으려면 다음 SQL 문을 사용할 수 있습니다.

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 
로그인 후 복사

이 쿼리는 점수 테이블에서 동일한 이름에 대해 더 높은 점수가 기록되지 않은 모든 행을 선택합니다.

SQL 문을 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
로그인 후 복사

Doctrine의 쿼리 빌더 API를 사용하여 쿼리를 구성할 수도 있습니다.

$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();
로그인 후 복사

이는 Doctrine을 사용하여 원본 SQL 문과 동일한 작업을 수행하는 효율적인 방법을 제공합니다.

위 내용은 교리 쿼리 언어를 사용하여 그룹당 최대 또는 최신 행을 효율적으로 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿