2010-06-23 3 views
5

Come si trova un massimo groupwise o la riga contenente il valore massimo in Doctrine? In SQL, di solito lo faccio utilizzando un self join come descritto here.Ricerca di Groupwise Maximum In Doctrine

Mentre è possibile impostare una relazione personale in Doctrine, esistono dei modi migliori per farlo?

+0

Qualsiasi motivo per cui non si desidera utilizzare una relazione personale? – DrColossos

+0

Due motivi: 1) Sembra violare il modello ORM. Cioè, non ha senso che l'oggetto abbia una copia di se stesso. 2) Raramente sto facendo questa query quindi non sembra valsa la pena aggiungere una relazione. –

risposta

5

Esempio di GroupWise max:

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

Esempio di riga contenente massima:

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

Questi non sono probabilmente gli unici modi (o più pulita), ma ho appena testato entrambi e funzionano .

1

Questa domanda è davvero vecchia ma si posiziona molto su Google per "doctrine groupwise max", quindi ho pensato di aggiungere la mia soluzione.

Nel mio caso avevo un'entità padre con molti figli e volevo selezionare i campi dal bambino con l'ID più alto.

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