0

次のケースの SQL クエリを理解しようとしています。

私は 2 つのテーブルを持っています。1 つは項目を含み、もう 1 つは特定の項目ごとのプロパティを含みます。特定の にリストされているすべてのプロパティと正確に一致するすべてのアイテムを見つけるにはどうすればよいlistOfPropertiesですか? たとえばlistOfProperties = ['p3','p5','p2']、クエリの結果として返されるレコードの 1 つである id=4 のアイテムは、Properties'p3'、'p5'、および 'p2' の 1 つのレコードを正確にテーブル 3 に含める必要があります。テーブルの 'Items' と 'Properties' は 1 対多のタイプで関連付けられていることがわかります。

みんなに感謝します!

PS このクエリに対して (Yii フレームワークで) CDbCriteria を記述できれば素晴らしいと思います。

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 に答える