我有4张桌子:
内容:
id(int)
title(varchar)
text(text)
Run Code Online (Sandbox Code Playgroud)
学科:
id(int)
title(varchar)
prent_id(int)
Run Code Online (Sandbox Code Playgroud)
组:
id(int)
title(varchar)
Run Code Online (Sandbox Code Playgroud)
关系:
id(int)
content_id(int)
group_id(int)
subject_id(int)
Run Code Online (Sandbox Code Playgroud)
关系到的内容是多对多.
群体到内容是多对多的.
受到的内容是多对多.
内容可能属于多个主题或几个组.
我想执行一个像这样的查询:
select * from relation where group_id = 1,3 and subject_id = 1,4,6,7
Run Code Online (Sandbox Code Playgroud)
boo*_*dev 15
你可以使用findAllByAttributes:
$relation_models = Relation::model()->findAllByAttributes(array(
'group_id'=>array('2','3'),
'subject_id'=>array('4','5','7')
)
);
Run Code Online (Sandbox Code Playgroud)
这会给你类似的东西(实际查询可能包含别名):
select * from relation where group_id IN (1,3) and subject_id IN (1,4,6,7)
Run Code Online (Sandbox Code Playgroud)
但是如果你想:( where group_id IN (1,3) OR subject_id IN (1,4,6,7)即OR而不是AND)那么你将不得不使用CDbCriteria:
$criteria = new CDbCriteria;
$criteria->condition = 'group_id IN (1,3) OR subject_id IN (1,4,6,7)'
$relation_models = Relation::model()->findAll($criteria);
Run Code Online (Sandbox Code Playgroud)
你也可以使用addInCondition:
$criteria->addInCondition('group_id', array('1','2'), 'OR');
$criteria->addInCondition('subject_id', array('1','4','6','7'), 'OR');
$relation_models = Relation::model()->findAll($criteria);
Run Code Online (Sandbox Code Playgroud)
但是,请记住绑定参数,以便从用户那里获取输入.像这样的东西:
$criteria->condition = 'group_id IN (:gid1, :gid2) OR subject_id IN (:sid1, :sid2, :sid3, :sid4)';
$criteria->params = array(':gid1'=>$xyz,':gid2'=>'2',':sid1'=>$uvw,':sid2'=>$abc,':sid3'=>'6',':sid4'=>'7');
$relation_models = Relation::model()->findAll($criteria);
Run Code Online (Sandbox Code Playgroud)