교리 쿼리 언어: 그룹당 최대 또는 최신 행 찾기
일부 데이터베이스 작업에서는 최대 또는 최신 행을 쿼리해야 합니다. 데이터 그룹 내의 행. 이러한 작업을 수행하는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!