我想创建一个可以包含多个critera的查询,如下所示:
select * from table where c1 IN(...) AND c2 IN (....) AND c3 IN (....);
我可能使用3个字段(c1..c3)或者可能只使用一个字段,IN子句的数组也不固定,这是我的代码:
$w = 'select * from jobs where ';
$c1 = new CDbCriteria();
if($dcr!=null){
$w = $w.'division IN(';
$dcrr = "'". implode("', '", $dcr) ."'";
$w = $w.$dcrr.");";
foreach($dcr as $txt){
$c1->compare('division',$txt,true,'OR');
}
}
if($lcr!=null){
$c2 = new CDbCriteria();
foreach($lcr as $txt){
$c2->compare('location',$txt,true,'OR');
}
}
if($scr!=null){
$c3 = new CDbCriteria();
foreach($lcr as $txt){
$c3->compare('Salary',$txt,true,'OR');
}
}
$connection=Yii::app()->db;
$connection->active=true;
$command=$connection->createCommand($w);
$model = $command->query();
$connection->active=false;
$w='';
//$model = Jobs::model()->findAll($c2);
}
}
$this->renderPartial('_index', array('model'=>$model));
答案 0 :(得分:1)
想法是使用addInCondition
使用类似的东西:
$criteria = new CDbCriteria();
if ($useC1)
{
$criteria->addInCondition('c1', getOptionsArrayForC1());
}
if ($useC2)
{
$criteria->addInCondition('c2', getOptionsArrayForC2());
}
if ($useC3)
{
$criteria->addInCondition('c3', getOptionsArrayForC3());
}