Мой метод.
Допустим имеется у нас инфоблок с предложениями продавцов. В каждом предложении у нас есть поле с привязкой к продавцу. Продавец - это запись в другом инфоблоке. Делать обращение к продавцам при обработке каждого предложения - затратно и нелогично.
Делаем следующим образом. Сначала перебираем все предложения и записываем все возможные значения продавцов (ID записи в инфоблоке продавцов) в отдельный массив при этом ключами (!). Т.е. обрабатывая запись мы получили ID продавца = 100, делаем ключ в массив $arSellers[100] = 1. В итоге получаем массив продавцов, где ключи - ID продавцов, а значения везде = 1. Массив имеет вид:
[CODE]array(
1=>1,
2=>1,
3=>1,
4=>1,
...
);[/CODE]
Теперь делаем выборку вида
[CODE]CIBlockElement::GetList(array(), array('ID'=>array_keys($arSellers)));[/CODE]
В ходе этой обработки, допустим, мы можем $arSellers[100] заменить на значения элемента с ID = 100. Получим некий справочник продавцов.
Ну и далее вы этот справочник можете использовать как душе угодно - вставить в выборку предложений, вывести в шаблоне название и ссылку на продавца. Тут по сути всего 2 запроса (хотя на практике может быть чуть больше, допустим 4 или 5). Ну и разумеется, лучше всё это хозяйство кэшировать.