Приглашаем опытного программиста для поддержки и развития крупного информационного портала на Битрикс.
27.11.2008 22:12:12
Приглашаем опытного программиста для поддержки и развития крупного информационного портала на Битрикс.
|
|
|
|
27.11.2008 22:49:23
Мой метод.
Допустим имеется у нас инфоблок с предложениями продавцов. В каждом предложении у нас есть поле с привязкой к продавцу. Продавец - это запись в другом инфоблоке. Делать обращение к продавцам при обработке каждого предложения - затратно и нелогично. Делаем следующим образом. Сначала перебираем все предложения и записываем все возможные значения продавцов (ID записи в инфоблоке продавцов) в отдельный массив при этом ключами (!). Т.е. обрабатывая запись мы получили ID продавца = 100, делаем ключ в массив $arSellers[100] = 1. В итоге получаем массив продавцов, где ключи - ID продавцов, а значения везде = 1. Массив имеет вид:
Теперь делаем выборку вида
В ходе этой обработки, допустим, мы можем $arSellers[100] заменить на значения элемента с ID = 100. Получим некий справочник продавцов. Ну и далее вы этот справочник можете использовать как душе угодно - вставить в выборку предложений, вывести в шаблоне название и ссылку на продавца. Тут по сути всего 2 запроса (хотя на практике может быть чуть больше, допустим 4 или 5). Ну и разумеется, лучше всё это хозяйство кэшировать.
———
|
|||||
|
|
03.12.2008 20:50:05
Была такая же ситуация, но с бОльшим количеством связей с другими инфоблоками. Пробовали по-разному. В итоге - использовали чистый SQL. Ну, скажем так, пратически чистый, немноо зависящий все-таки от переданных компоненту параметров.
крыша этого дома - пуленепробиваемая солома.
|
|
|
|
03.12.2008 22:54:14
Виталий Оборин верно обрисовал подход.
Проблему с подобными симптомами решали аналогичным его совету способом. Имхо, подобные вещи получаются из-за невозможности с помощью API битрикса сделать JOIN нескольких ИБ и вернуть результаты в рекордсете.
Поэтому и приходится делать запрос к первому ИБ, собирать ключи внешние и делать второй запрос к связанным ИБ что бы вытащить нужные данные. Ну или обходить в цикле и на каждой итерации дёргать. К примеру, стандартная функция по приводу внешней связи к читабельному виду (Название + URL) делает запрос с помощью всё того же GetList и если вы в цикле для своей выборки делает подобные вещи, то получите по одному запросу на каждый шаг цикла. Хотя можно обойтись одним или несколькими запросами. Очень интересно узнать менение разработчиков, что именно мешает и мешает ли ввести в классы работы с ИБ возможности джойна на уровне API |
|||
|
|
04.12.2008 01:30:26
Как вариант - фильтр на ajax попробовать, типа гуглового выпадающего списка фраз.
Не надо сверлить зубы через задний проход дрелью от Сваровски
|
|||||
|
|
04.12.2008 11:27:39
Гадаю, проблема в разработчиках, которые написали неправильный код, или в битриксе, который тормозит и будет тормозить... А как вы решаете вопрос с обновлениями версий битрикса при использовании чистого SQL? Он у вас не связан с другими частями? |
|||
|
|
04.12.2008 11:28:53
Как это проверить, нигде не нашел? |
||||
|
|
|||