具有子查询的Yii2条件

时间:2015-11-09 23:03:47

标签: yii2 where-in sql-subselect

如何在Yii2中编写此SQL查询?

SELECT * FROM table
WHERE column1 IN (SELECT column2 FROM table WHERE column1 = 5)

5 个答案:

答案 0 :(得分:3)

假设您的模型名为YourModel,表示名称为table的表。然后查询将是:

$subQuery = YourModel::find()->select('column2')->where(['column1' => 5]);
$query = YourModel::find()->where(['column1' => $subQuery]);
$models = $query->all();

之前还问过similar question

答案 1 :(得分:0)

Yii::$app->db->createCommand('SELECT * FROM table
       WHERE column1 IN (SELECT column2 FROM table WHERE column1 = :val)', [':val' => 5])->queryAll();

将返回关联数组,例如[' id' => 1,' name' => '维克多']

答案 2 :(得分:0)

Yii2 SubQuery:

 $(document).ready(function(){
   $('tr').each(function(){
     var _this = this;
     $(this).find('input#updateBox').on("click", function() {
            var customerId =  $(_this).find('td:eq(1)').text();
                $('#texti').text(customerId);
    });
  });
});

$ query =>选择 YourBaseModel 中的p_id值。 p_id值存储在$ query变量中。然后检查 YourSubModel 中的$ query值。

答案 3 :(得分:0)

你可以这样做:

$query = 'SELECT * FROM table
          WHERE column1 IN (SELECT column2 FROM table WHERE column1 = 5)';

$list = $model::findBySql($query)->all();

或者:

$subquery = $model::find()->select('column1');
$query = $model::find()->where(['not in',$subquery])->all();

在这种情况下它是一样的。 我希望我帮助你

答案 4 :(得分:0)

这有很多方法可以解决您的问题。 在使用yii2框架方面,我将给出一个最正确的例子。

SQL:

SELECT * 
FROM table 
WHERE 
    column1 IN 
    (SELECT column2 
        FROM table
        WHERE column1 = 5)

Yii2 activerecord:

$subQuery = TableModel::find()->select('column2')->where(['column1' => 5]);
$result = TableModel::find()->where(['IN', 'column1', $subQuery])->all();