是否可以在Yii中的ActiveRecord中进行子查询?
我有这样的查询:
从table1中选择*
table1.field1 in(从table2中选择table2.field2)
我目前正在使用以下代码:
object1 :: model() – > findAll(array(‘condition’=>’t.field1 in(select table2.field2 from table2)’))
[编辑]
我想知道是否有一种方法来构造子查询而不使用sql,并且不使用连接.
有什么解决方案吗?
并提前感谢.
首先按db字段查找doublets:
$model=new MyModel('search'); $model->unsetAttributes(); $criteria=new CDbCriteria(); $criteria->select='col1,col2,col3'; $criteria->group = 'col1,col3'; $criteria->having = 'COUNT(col1) > 1 AND COUNT(col2) > 1 AND COUNT(col3) > 1';
$subQuery=$model->getCommandBuilder()->createFindCommand($model->getTableSchema(),$criteria)->getText();
$mainCriteria=new CDbCriteria(); $mainCriteria->condition=' (col1,col3) in ('.$subQuery.') '; $mainCriteria->order = 'col1,col3';
如何使用:
$result = MyModel::model()->findAll($mainCriteria);
要么:
$dataProvider = new CActiveDataProvider('MyModel',array( 'criteria'=>$mainCriteria,));
资料来源:http://www.yiiframework.com/wiki/364/using-sub-query-for-doubletts/