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

标签 mysql sql yii count

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

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

关于mysql - Yii CDbCriteria 根据另一个表的计数选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28475501/

相关文章:

php - Yii2 - 如何强制响应 JSON 格式化程序使用对象而不是数组?

python - 运行 SQLalchemy 立即导致与数据库的连接中止

sql - 使用以前的非空值填充表中的空值。每列有几个空值?

sql - 将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。 SQL 服务器

mysql - 销售系统数据库设计

security - YII 框架中的 CSRF token 多久更改一次

mysql - 意外的 ROLLUP 行为

php - 如果出现多行,如何在 php mysql 的侧存储过程中执行选择查询?

php - 如何使用 php 和 mysql 记录用户操作?

php - 如何计算以秒为单位的两个日期时间之间的差异?