Здравствуйте, есть простой фильтр:
Код |
---|
$arFilter = Array("IBLOCK_ID"=>8, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y");
if(!empty($arWorks))$arFilter["PROPERTY_SERVICE"]=$arWorks;
|
В свою очередь $arworks я беру предварительно из другого запроса
Код |
---|
$arSelect3 = Array("ID", "NAME");
$arFilter3 = Array("IBLOCK_ID"=>11, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y");
$arFilter3["PROPERTY_CAT"] = Array(1626,2011,1625,1532,2052,2050,1137,1522,1138,1043,1033,16,18);
$res3 = CIBlockElement::GetList(Array(), $arFilter3, false, false, $arSelect3);
while($works = $res3->Fetch())
{
if(!in_array($works["ID"],$arWorks))$arWorks[]=$works["ID"];
} |
В результате основной запрос содержит около 3000 элементов выборки по свойству "PROPERTY_SERVICE".
Говорю сразу что никаких запросов БД внутри цикла я не делаю. Сначала получаю список работ $arWorks а потом подставляю это значение в свойство сервисов.
Но скрипт зависает.
Когда другой список работ фильтруется
Код |
---|
$arFilter3["PROPERTY_CAT"] = Array(64,65); |
то скрипт отрабатывает за 0.7 секунды хотя в результирующем запросе в свойстве "PROPERTY_SERVICE" отбирается около 500 элементов. Это конечно не 3000 но все равно не мало, а разница во времени существенна.
Как это можно исправить?