【问题标题】:Yii CDbCriteria select row based on count of another tableYii CDbCriteria 根据另一个表的计数选择行
【发布时间】:2015-02-12 10:49:07
【问题描述】:

我有一个帖子表和一个用户表。帖子使用帖子表中的 authorId 列链接到用户。我想选择那些使用 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。

【问题讨论】:

    标签: mysql sql yii count


    【解决方案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)');
    

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

    【讨论】:

    • 我不确定我是否可以使用它。我希望它通过一个 CActiveDataProvider 然后在视图文件的 CGridView 中使用。如果我使用查询生成器,这可能吗?
    • 您可以使用 CArrayDataProvider 代替 CActiveDataProvider
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 2014-01-01
    • 2015-02-15
    • 2018-11-12
    相关资源
    最近更新 更多