【问题标题】:Yii2 subquery in Active RecordActive Record 中的 Yii2 子查询
【发布时间】:2015-05-11 09:50:47
【问题描述】:

如何将此 sql 转换为活动记录查询

SELECT * FROM `base_twitter` WHERE id NOT IN (SELECT base_id from base_followers)

【问题讨论】:

    标签: yii yii2


    【解决方案1】:

    假设您的模型相应地命名为 BaseTwitter 和 BaseFollower,这应该可以工作:

    $subQuery = BaseFollower::find()->select('id');
    $query = BaseTwitter::find()->where(['not in', 'id', $subQuery]);
    $models = $query->all();
    

    【讨论】:

    • 我要等10分钟
    • 这可能用于多列吗?我的意思是我可以在子查询中选择多个列,然后在 $query 中使用它们吗?
    【解决方案2】:
    // SELECT * FROM (SELECT * FROM `user` WHERE `active` = 1) `activeusers`;
    $subquery = (new \yii\db\Query)->from('user')->where(['active' => true])
    $query = (new \yii\db\Query)->from(['activeusers' => $subquery]);
    
    // subquery can also be a string with plain SQL wrapped in parenthesis
    // SELECT * FROM (SELECT * FROM `user` WHERE `active` = 1) `activeusers`;
    $subquery = "(SELECT * FROM `user` WHERE `active` = 1)";
    $query = (new \yii\db\Query)->from(['activeusers' => $subquery]);
    

    【讨论】:

    • 这不是活动记录。输出将是数组
    【解决方案3】:

    试试这个查询

    $models = BaseTwitter::find()->where('id NOT IN (SELECT base_id from base_followers)')->all();
    

    【讨论】:

      猜你喜欢
      • 2016-03-15
      • 2012-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多