Как «оптимально» посчитать кол-во элементов по свойству, в Битриксе?

Добрый день.
Имеется "Инфоблок 2.0", со свойством "source" тип список (перечень в $arSource), порядка 100k+ элементов.
Необходимо посчитать кол-во элементов по каждому свойству из списка.
$arSource = ["google","yandex","mail","avito", "еще 10 элементов"]; 
    foreach ($arSource as $s)
        $uCnt[$s] = \Bitrix\Iblock\Elements\ElementApivatsmtsTable::getList(['filter' => ['source.VALUE'=>$s], 'count_total' => 1])->getCount();

Пример того что я набросал - это работает, но выборка происходит гораздо дольше чем хотелось-бы (порядка 2 сек.).
С учетом того что кол-во элементов будет увеличиваться, хотелось-бы быстрее. Может подскажете более оптимальную выборку для моего случая?
  • Вопрос задан
  • 1019 просмотров
Решения вопроса 1
winer
@winer
занимаюсь разработкой сайтов на 1c-bitrix
Сделайте запрос с группировкой и подсчётом. Пример:
\Bitrix\Iblock\Elements\ElementCatalogTable::getList([
    "select" => [
        "BRAND_VALUE" => "BRAND.VALUE",
        "COUNT",
    ],
    "filter" => [
        "!BRAND.VALUE" => false
    ],
    "group" => [
        "BRAND.VALUE"
    ],
    "runtime" => [
        new \Bitrix\Main\ORM\Fields\ExpressionField('COUNT',  'COUNT(*)' )
    ]
])
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Beeshop87
Я бы сначала сделал getList и работал с результатом.
Слышал что запросы к БД в цикле - очень не хорошо =)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы