Как получить разделы в которых есть активные товары?
Мне нужно вывести отфильтровавнный по наименованию список разделов, но только в которых есть активные элементы( которые в свою очередь могут находится на 4..7 уровне вложенности)
Это возможно одним запросом через d7 как-то или только несколько запросов с циклом?
не буду утверждать что точно можно одним запросом, но можно попробовать. при выборке разделов сделать референс через onetomany на таблицу элементов и в фильтре добавить фильтр по активности элементов.
в принципе сам неделю назад тоже самое делал, но не одним запросом, отчасти потому что не знал про onetomany.
В итоге сделал через циклы, сначала все разделы по имени, а потом проверяем в цикле каждый по старинке через CIBlockElement::GetList с использованием фильтра "SECTION_ID"=>$arSection['ID'], "INCLUDE_SUBSECTIONS"=>'Y'
Я бы на вашем месте сделал по-другому. Приложу ниже код который использовался в другой задаче, в построении списка разделов первых двух уровней в виде дерева, т.е. родитель и дочерний раздел. Вместо того, чтобы делать запрос на кол-во элементов в цикле, можно отдать эту работу СУБД и получать эту информацию подзапросом. Код можно адаптировать под свои задачи. Все что вам нужно там есть.
Борис , спасибо за пример.
По поводу хитов каталога: нет, это не в каталоге, а на отдельной станице. На самом деле там получается не так и много запросов хоть и в цикле так как сначала получаю разделы отфильтрованные по названию и это примерно +/- 5-10, но да хотелось и этого избежать потому и тему создал
tgarl, 5-10 это не так больно как в моем случае было. Где разделов 1 и 2 уровня было за 50шт. И грузилось это 10сек, на каждом хите. Написал подзапросом итог 0,5сек