如何在Yii中进行多标准查询?

时间:2014-06-23 19:11:16

标签: php mysql sql yii

我想创建一个可以包含多个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));

1 个答案:

答案 0 :(得分:1)

想法是使用addInCondition

使用类似的东西:

$criteria = new CDbCriteria();
if ($useC1)
{
    $criteria->addInCondition('c1', getOptionsArrayForC1());
}
if ($useC2)
{
    $criteria->addInCondition('c2', getOptionsArrayForC2());
}
if ($useC3)
{
    $criteria->addInCondition('c3', getOptionsArrayForC3());
}