2012-01-03 8 views
0

私はテーブル「投稿」を持ち、投稿はいくつかのコメント(外部キー関係)を持つことができます。私は今、投稿ごとに最後のコメント(最も高いIDを持つ)を与えるための参加をしたいと思う。 「通常のSQL」でYiiのGroupwise Maximum CdbCriteria

私はこれを使用します。

SELECT p1.spread, p1.message, p1.id FROM posts AS p1, (SELECT 
spread, MAX(id) AS maxid FROM posts GROUP BY spread) AS p2 WHERE 
p2.spread = p1.spread AND p1.id = p2.maxid 

私はCDbCriteriaかCActiveRecordの他の方法でそれを行うだろうか?あなたの助けをありがとう

答えて

0

最初は、あなたのクエリは非常に複雑です..あなたの結果はクエリで同じになります。

SELECT max(id) as id, spread, message 
    FROM posts 
    GROUP BY spread 

は今CDbCriteriaで、あなたの場合には例えばそのPosts.php(モデル)

public function last_comment() 
{ 
    $criteria = new CDbCriteria; 
    $criteria->select = 'max(id) as id, spread, message'; 
    $criteria->group = 'spread'; 

    return new CActiveDataProvider($this, array(
     'criteria'=>$criteria, 
    )); 
} 

を関連モデル

でクエリを記述する必要があり、それはあなたを助けることを願っています.. :)

+0

あなたの答えをありがとうが、あなたが示唆したクエリは、私に正しいIDと広がりを与えますが、IDに関連するメッセージではありません。 – dave3011