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)');
注意:-我还没有测试过这个标准,但希望它会起作用。
我有一个帖子 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)');
注意:-我还没有测试过这个标准,但希望它会起作用。