2012-01-03 50 views
0

我有一个表“职位”和一个职位可以有几个评论(外键关系)。我现在想创建一个连接,为每个帖子提供最后一条评论(ID最高)。Groupwise最大与Yii CdbCriteria

随着“正常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的任何其他方法做到这一点?感谢您的帮助

回答

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 2012-01-06 21:30:48