Олег, SubQuery это конечно шаг вперед, но вам он не подойдет.
На данный момент могу только посоветовать выполнить эту задачу на php
[CODE]
if(CModule::IncludeModule('iblock'))
{
$rsElements = CIBlockElement::GetList(
array() //порядок следования элементов не важен
,array(
"IBLOCK_ID" => $iblock,
"PROPERTY_JANR" => $ar_res1["~VALUE"],
)
,false
,false
,array("ID", ..., "PROPERTY_JANR") // только нужные поля
);
$arGroup = array(); //для промежуточного результата
$arList = array(); //результат
while($arElement = $rsElements->GetNext())
{
if(is_array($arElement["PROPERTY_JANR_VALUE"])) //инфоблоки+
$arGroup[$arElement["ID"]] += count($arElement["PROPERTY_JANR_VALUE"]);
elseif($arElement["PROPERTY_JANR_VALUE"])
$arGroup[$arElement["ID"]] += 1; //инфоблок обычный
$arList[$arElement["ID"]] = $arElement;
}
//удаляем элементы с менее чем 3-мя пересекающимися значениями свойств
foreach($arGroup as $id => $cnt)
if($cnt < 3)
unset($arList[$id]);
}
[/CODE]