0

我试图找出以下情况的 SQL 查询:

我有 2 个表,一个包含项目,另一个包含每个特定项目的属性。我怎样才能找到与某些中列出的所有属性完全匹配的所有项目listOfProperties?例如,如果listOfProperties = ['p3','p5','p2']id=4 的项目(作为查询结果返回的记录之一)必须准确包含在表Properties3 中的记录中,一个用于“p3”、“p5”和“p2”。正如人们可以猜测的那样,表“项目”和“属性”以一对多类型相关。

非常感谢大家!

PS 如果您可以为此查询编写 CDbCriteria(在 Yii 框架中),那就太好了。

4

2 回答 2

1

这对我有用,灵感来自@nauphal 和这篇文章:

$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);
于 2013-05-23T12:03:17.327 回答
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);
于 2013-05-23T09:46:47.950 回答