cakephpのgroup byで・・・。

belongsTOの関係にあるコメントのようなモデルをたとえば新着5件表示するとする。
その際5件とも同じ記事のコメントは負荷として、それぞれ別の記事5件の最新のコメントを表示する。
で、けっこうはまってしまいました。

group by で 記事IDでグループ化すればいいじゃんと思ってたら、なぜか古いコメントのみ出てくる。
orderを変更してもだめ。

これは、group by は orderよりも先に実行されてしまうとのこと。

1回のクエリでなんとかしようといろいろ考えた末、あきらめました。
とりあえず、先にグループ化した際の最新のコメントのIDだけ取得。
その後そのIDをconditionに取得。


//グループ化してID抽出
$params = array(
'fields' => array('MAX(Comment.id) as last_id'),
'conditions'=>array(
'Comment.status'=>1,
'Item.status'=>1
),
'limit' => 5,
'order' =>'last_id DESC',
'group' => 'Comment.item_id',
'contain'=>array('Item'),
);
$id = Set::combine($this->find('all',$params),'{n}.Item.id','{n}.0.last_id');
}

$conditions = array(
'conditions'=>array($this->name.'.id'=>$id),
'order'=>$this->name.'.created DESC',
);
return parent::find('all', array_merge($conditions,$options));