我正在尝试找出以下情况的SQL查询:
我有2个表,一个包含项目,另一个包含每个特定项目的属性。我怎样才能找到与某些listOfProperties
中列出的所有属性完全匹配的所有项目?例如。 if listOfProperties = ['p3','p5','p2']
然后id = 4的项目,即作为查询结果返回的记录之一,必须在表Properties
中包含3个记录,一个用于'p3','p5'和' P2' 。可以猜测表'项'和'属性'在一对多类型中相关。
非常感谢所有人!
P.S。如果您可以为此查询编写CDbCriteria(在Yii框架中),那就太棒了。
答案 0 :(得分:1)
这对我有用,受到@nauphal和this帖子的启发:
$list = array('p3','p5','p2');
$criteria = new CDbCriteria();
$criteria->alias = 'i';
$criteria->join = ' JOIN item_properties ip ON i.id = ip.item_id';
$criteria->addInCondition('item_property',$list);
$criteria->having = "COUNT(DISTINCT(item_property)) = ".count($list);
$criteria->group = 'i.id';
$items = Items::model()->findAll($criteria);
答案 1 :(得分:0)
希望这会有所帮助
$criteria = new CDbCriteria();
$criteria->alias = 'i';
$criteria->join = ' JOIN item_properties ip ON i.id = ip.item_id';
$criteria->addInCondition('item_property',array('p3','p5','p2'));
$items = Items::model()->findAll($criteria);