[QUOTE]RZVL пишет:
А вот это как раз важно...[/QUOTE]
Т.е. у вас есть группы пользователей, которые не могут видеть элементы из вашей выборки? Если так, то оставьте $arFilter старым. Но не фильтр тут особо важен.
[QUOTE]RZVL пишет:
У меня в основном инфоблоке 400 элементов... Выбираю все элементы, в селекте только: ID, PROPERTY_ONE [/QUOTE]
А вам нужно обязательно выбирать все элементы?
В общем, не знаю конкретно какую задачу вы решаете этой выборкой, но в целом ситуация такая: при работе через _CIBElement у вас на каждый элемент будет формироваться плюс один запрос на выборку свойств (это помимо базовых для всей выборки). А если работать через CIBlockResult, то основная выборка увеличится на количество запросов, равное выбираемым свойствам и для каждого такого свойства будет добавлено по "джойну" в основную выборку, т.е. здесь появляется ограничение на количество выбираемых одновременно свойств. Также в последнем варианте появляются еще некоторые неудобства с работой по множественным свойствам - они формируются как отдельный элемент.
Пример выборки через _CIBElement:
[CODE]
CModule::IncludeModule('iblock');
$arOrder = array(
'ID' => 'ASC'
);
$arFilter = array(
'IBLOCK_ID' => <ID инфоблока>,
'ACTIVE' => 'Y',
'ACTIVE_DATE' => 'Y'
);
$arGroupBy = false;
$arNavParams = false;
$arSelect = array(
'IBLOCK_ID',
'ID',
'NAME',
'PROPERTY_*',
);
$arResult['ITEMS'] = array();
$dbItems = CIBlockElement::GetList($arOrder, $arFilter, $arGroupBy, $arNavParams, $arSelect);
while($obItem = $dbItems->GetNextElement(false, false)) {
$arItem = $obItem->GetFields();
$arProp = $obItem->GetProperties();
$arItem['PROPERTIES'] = array(
'SOME_PROP_1' => $arProp['SOME_PROP_1'],
'SOME_PROP_2' => $arProp['SOME_PROP_2'],
'SOME_PROP_3' => $arProp['SOME_PROP_3'],
'SOME_PROP_4' => $arProp['SOME_PROP_4'],
);
$arResult['ITEMS'][] = $arItem;
}
[/CODE]
Пример выборки через CIBlockResult:
[CODE]
CModule::IncludeModule('iblock');
$arOrder = array(
'ID' => 'ASC'
);
$arFilter = array(
'IBLOCK_ID' => <ID инфоблока>,
'ACTIVE' => 'Y',
'ACTIVE_DATE' => 'Y'
);
$arGroupBy = false;
$arNavParams = false;
$arSelect = array(
'IBLOCK_ID',
'ID',
'NAME',
'PROPERTY_SOME_PROP_1',
'PROPERTY_SOME_PROP_2',
'PROPERTY_SOME_PROP_3',
'PROPERTY_SOME_PROP_4'
);
$arResult['ITEMS'] = array();
$dbItems = CIBlockElement::GetList($arOrder, $arFilter, $arGroupBy, $arNavParams, $arSelect);
while($arItem = $dbItems->GetNext(false, false)) {
$arResult['ITEMS'][] = $arItem;
}
[/CODE]
Т.е. для _CIBElement указываем PROPERTY_* в $arSelect, а для CIBlockResult перечисляем нужные свойства.
_CIBElement - теоретически не имеет ограничений по количеству свойств, но очень тяжел при выборке большого количества элементов с большим количеством свойств. Подходит для универсальных компонентов вывода списков элементов с постраничной навигацией.
CIBlockResult - наиболее экономичен, но на практике пригоден только для "ручных" выборок, когда заранее известно количество свойств и их меньше 30, например. Какое точно ограничение не могу сказать, т.к. помимо джойнов для свойств выполняются и джойны для других сущностей. Максимум же в MySQL 61 джойн, если не ошибаюсь. И не следует забывать про особенность возвращаемого результата с множественными значениями свойств.
Какой способ наиболее выгоден вам, думаю, определите сами.