Задать вопрос
@photosho

Как получить по одному элементу с каждым значением свойства?

Нужно получить из инфоблока по одному элементу с каждым значением заданного свойства. Как это можно сделать? Пытался сделать при помощи "arGroupBy" (CIBlockElement::getList), но в этом случае результирующий массив содержит только количество элементов по каждому значению свойства, а самих элементов в нем нет.
  • Вопрос задан
  • 119 просмотров
Подписаться 1 Средний 4 комментария
Пригласить эксперта
Ответы на вопрос 1
@PetrPo
Мало условий, вариант если выбираемый элемент в "группе" с наибольшим ID
use Bitrix\Main\Loader;
use Bitrix\Iblock\ElementTable;
use Bitrix\Iblock\ElementPropertyTable;
use Bitrix\Main\Entity\ExpressionField;

Loader::includeModule('iblock');

$iblockId = 1;
$propertyId = 1;

$elementIds = [];

$iterator = ElementPropertyTable::getList([
	'select' => [new ExpressionField('ID', 'MAX(%s)', 'IBLOCK_ELEMENT_ID'), 'VALUE'],
	'filter' => ['IBLOCK_PROPERTY_ID' => $propertyId, '!VALUE' => false],
]);

while($row = $iterator->fetch()) {
	$elementIds[] = $row['ID'];
}

$elements = ElementTable::getList([
	'select' => ['ID', 'NAME'],
	'filter' => ['IBLOCK_ID' => $iblockId, 'ID' => $elementIds],
])->fetchAll();

print_r($elements);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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