Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Выбор инфоблоков один-ко-многим

00 голосов
4
Есть два инфоблока. Отношение один ко многим.
1. Компания
2. Автомобиль

В инфоблоке "Автомобиль" есть свойство "Компания" (привязка к элементу в виде списка).
Также там есть другие свойства например "цвет".

Задача. Как выбрать список компании у которых есть автомобиль красного цвета?
спросил 02 Фев, 14 от Eoling (140 баллов)

4 Ответы

00 голосов
Идей нету? Только сырым запросом через $db->query ?
ответил 10 Июнь, 14 от Eoling (140 баллов)
00 голосов
Цитата
Максим Месилов пишет:
Посмотрите документацию по методу CIBlockElement::GetList

вам нужно сделать группировку по свойству компания при условии красного цвета

а вторым запросом получите по ИД компаний инфу по ним


Нет этот вариант мне не подходит. Допустим у меня есть 10000 компаний. Мне нужно вывести список компаний постранично, на первой странице например 10. В вашем варианте мне придется сделать 10000+1 запросов, чтобы вывести 10 компаний и список страниц.
ответил 08 Окт, 14 от Eoling (140 баллов)
00 голосов
Или нет, видимо я чето не понял. Можете показать пример как сделать такую группировку?
GetList позволяет сделать группировку по свойству, но ведь мне надо сделать по свойству связанного элемента...
ответил 09 Фев, 15 от Eoling (140 баллов)
00 голосов
Код
//Select compinies IDs which have red cars
$rsCompaniesWithRedColor = CIBlockElement::GetList(
  array(), //no order by
  array(
    "IBLOCK_ID" => $CARS_IBLOCK_ID,
    "PROPERTY_COLOR" => "red",
  ),
  array(
    "PROPERTY_COMPANY"
  )
);
$arCompanies = array();
while($ar = $rsCompaniesWithRedColor->Fetch())
  $arCompanies[] = $ar["PROPERTY_COMPANY_VALUE"];

//Select Companies
$rsCompanies = CIBlockElement::GetList(
  array(...), //any order
  array(
    "IBLOCK_ID" => $COMPANIES_IBLOCK_ID,
    "=ID" => $arCompanies
  ),
  false,
  array(...), //any paging parameters
  array(...), //specify which fields do you need to display in the template
);

ответил 21 Май, 15 от Miso (740 баллов)

Похожие вопросы

0 голосов
2 ответов
спросил 26 Апр, 14 от NASTIULEA (100 баллов)
+1 голос
1 ответ
спросил 11 Март, 21 от аноним
0 голосов
0 ответов
спросил 11 Янв, 18 от аноним
0 голосов
0 ответов