2010-06-23 3 views
5

Doctrine에서 그룹 최대 값 또는 최대 값을 포함하는 행을 어떻게 찾을 수 있습니까? SQL에서는 일반적으로 here과 같이 자체 조인을 사용하여이 작업을 수행합니다.Doctrine에서 Groupwise 최대 값 찾기

Doctrine에서 자체 관계를 설정하는 것이 가능하지만 더 좋은 방법이 있습니까? GroupWise에 최대의

+0

자기 관계를 사용하지 않으려는 이유가 있습니까? – DrColossos

+0

두 가지 이유 : 1) ORM 모델을 위반 한 것 같습니다. 즉, 객체가 자신의 사본을 가지는 것은 의미가 없습니다. 2)이 쿼리를 사용하는 경우가 거의 없으므로 관계를 추가 할 가치가없는 것 같습니다. –

답변

5

예 : 행 포함 최대의

$query = Doctrine_Query::create() 
    ->select("txs.id, txs.amount, txs.valid_from") 
    ->from("Tx txs") 
    ->where("txs.amount = (SELECT MAX(transact.amount) FROM tx transact WHERE txs.id = transact.id)"); 

예 :

$query = Doctrine_Query::create() 
->select("txs.id, txs.amount, txs.valid_from") 
->from("Tx txs") 
->where("txs.id = (SELECT transact.id FROM tx transact WHERE transact.amount = (SELECT MAX(transactx.amount) FROM tx transactx))"); 

이 아마 유일한 방법 (또는 대부분의 청소) 아니지만, 난 그냥 모두를 시험하고 작동 .

1

이 질문은 정말 오래되었지만 Google에서 "doctrine groupwise max"에 대해 높은 점수를 매기므로 내 솔루션을 추가 할 것이라고 생각했습니다.

필자의 경우 부모 엔티티가 많았고 아이를 가장 많이 가진 필드를 선택하고 싶었습니다.

$qb 
    ->select('child1.field') 
    ->from(Entity::class, 'entity') 
    ->join('entity.children', 'child1') 
    ->leftJoin('entity.children', 'child2', 'WITH', 'child1.entity=child2.entity AND child1.id<child2.id') 
    ->where('child2.id IS NULL') 
;