我有一个帖子表和一个用户表。帖子使用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。
答案 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)');
注意: - 我没有测试过这个标准,但希望它会有用。