Мой предыдущий коммент удалили.
Подойду более лояльно.
Для фильтра по свойствам разных инфоблоков достаточно в строке:
Код |
---|
bitrix/modules/iblock/classes/mysql/iblockelement.php:347 |
Код |
---|
$sFrom .= "\t\t\tINNER JOIN b_iblock_element_prop_s".$iblock_id." FPS".$iPropCnt." ON FPS".$iPropCnt.".IBLOCK_ELEMENT_ID = BE.ID\n"; |
Поменять INNER на LEFT и вот это начинает работать:
Код |
---|
$arFilter = Array(
array(
"LOGIC"=>"OR",
array("IBLOCK_ID"=>38, "ACTIVE"=>"Y", "PROPERTY_CML2_ARTICLE"=>"00000440109"),
array("IBLOCK_ID"=>49, "ACTIVE"=>"Y", "PROPERTY_CML2_ARTICLE"=>"00000440109"),
array("IBLOCK_ID"=>53, "ACTIVE"=>"Y", "PROPERTY_CML2_ARTICLE"=>"00000440109"),
),
); |
Но тех поддержка отвечает что так и было задуманно.
Мне не понятно, почему тогда здесь (укрупненный кусок кода):
Код |
---|
foreach($arJoinProps["FPS"] as $iblock_id => $iPropCnt)
{
$sFrom .= "\t\t\tLEFT JOIN b_iblock_element_prop_s".$iblock_id." FPS".$iPropCnt." ON FPS".$iPropCnt.".IBLOCK_ELEMENT_ID = BE.ID\n";
$this->arFilterIBlocks[$iblock_id] = $iblock_id;
} |
Массив:
Содержит несколько ссылок на таблицы?
Этот массив заполняется функцией:
Код |
---|
bitrix/modules/iblock/classes/mysql/iblockelement.php:2520 |
Код |
---|
function PrepareGetList( |
Если ковырнуть ее, то мне показалось, что кто-то уже продумал логику фильтра из разных ИБ, но реализовывать ее до конца не стали.
Подскажите, почему? Неужели так сильно здесь INNER JOIN дает прироста производительности перед LEFT JOIN?