Yii CDbCriteria根据另一个表的计数选择行

时间:2015-02-12 10:49:07

标签: mysql sql yii count

我有一个帖子表和一个用户表。帖子使用posts表中的authorId列链接到Users。我想选择具有至少一个或多个帖子的用户,这些帖子使用CDbCriteria作为CGridView。 下面是我试图实现的SQL查询。

SELECT * 
    FROM user 
    WHERE ID IN 
        (SELECT creatorId FROM video GROUP BY creatorId HAVING count(*) > 0)

这是我到目前为止所尝试过的。

$criteria=new CDbCriteria;
$criteria->with = array('videoCount');

$criteria->addCondition('t.status=1');
$criteria->addCondition('videoCount>0');

这不起作用,因为'videoCount'是一种关系。

我如何做到这一点?我正在使用Yii 1.1.15。

1 个答案:

答案 0 :(得分:1)

如果可以,请尝试使用查询构建器

$query = Yii::app()->db->createCommand()
                        ->select()
                        ->from('user')
                        ->where(array('in','ID',  Yii::app()->db->createCommand()
                                                            ->select('creatorId')
                                                            ->from('video')
                                                            ->group('creatorId')
                                                            ->having('count(*) > 0')->queryColumn()))
                   ->queryAll();

这将执行所需的查询

SELECT * FROM `user` WHERE `ID` IN ('SELECT `creatorId` FROM `video` GROUP BY `creatorId` HAVING count(*) > 0')

<强>更新

如果您想坚持 CDbCriteria ,那么您可以试试这个

$criteria = new CDbCriteria();
$criteria->addCondition('ID IN (SELECT creatorId FROM video GROUP BY creatorId HAVING count(*) > 0)');

注意: - 我没有测试过这个标准,但希望它会有用。