Yii CDbCriteria select 行基于另一个 table 的计数

Yii CDbCriteria select row based on count of another table

我有一个帖子 table 和一个用户 table。帖子使用帖子 table 中的 authorId 列链接到用户。我想 select 那些至少有一个或多个帖子的用户使用 CGridView 的 CDbCriteria。 下面是我要执行的 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.

如果可以,请尝试使用查询生成器,因为它会容易得多

$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)');

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