使用Yii CdbCriteria分组最大值

时间:2012-01-03 23:26:31

标签: database yii

我有一个表“帖子”,一个帖子可以有几个评论(外键关系)。我现在想要一个联接,为每个帖子提供最后一条评论(具有最高ID)。

使用“普通SQL”我会用这个:

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的任何其他方法?谢谢你的帮助

1 个答案:

答案 0 :(得分: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,
    ));
}

希望它会对你有所帮助.. :)