ferdinant,
для ИС думаю сами переделаете
$oShop_Items = Core_Entity::factory('Shop_Item');
$oShop_Items
->queryBuilder()
->leftJoin('shop_item_properties', 'shop_items.shop_id', '=', 'shop_item_properties.shop_id')
->leftJoin('property_value_ints', 'shop_items.id', '=', 'property_value_ints.entity_id',
array(
array('AND' => array('shop_item_properties.property_id', '=', Core_QueryBuilder::expression('`property_value_ints`.`property_id`')))
)
)
->open()
->where('shop_item_properties.property_id', '=', 46) // ID 1-го свойства
->where('property_value_ints.value', '=', 25) // значение 1-го свойства
->setOr()
->where('shop_item_properties.property_id', '=', 8) // ID 2-го свойства
->where('property_value_ints.value', '=', 104) // значение 2-го свойства
->setOr()
->where('shop_item_properties.property_id', '=', 2) // ID 3-го свойства
->where('property_value_ints.value', '=', 31) // значение 3-го свойства
->close()
->where('shop_items.shop_id','=',1)
->where('shop_items.active','=',1)
->groupBy('shop_items.id')
->having(Core_Querybuilder::expression('COUNT(DISTINCT `shop_item_properties`.`property_id`)'), '=', 3);
$aShop_Items = $oShop_Items->findAll();
foreach($aShop_Items as $oShop_Item)
{
echo "{$oShop_Item->name}<br />";
}