
Бернгардт
17.12.2016
21:23:23
т.е. если ID не совпало, то данные по другим моделям не нужны?

Folt
17.12.2016
21:23:45
так а что там ?
ид элемента, свойства, значения?

Roman
17.12.2016
21:23:57
$arResult["ID"] == 50 - это ID инфоблока.

Бернгардт
17.12.2016
21:24:17
в одном выборе один инфоблок же?

Google

Roman
17.12.2016
21:24:20
в нем модели 30 моделей примерно в каждом
из 51 выбирается услуга.. и привязывается с маркам которые в 50, 53, 52 итп.

Folt
17.12.2016
21:25:41
$arFilter = Array(
"IBLOCK_ID"=>array(51),
...
if ($arResult["ID"] == 50)...
if ($arResult["ID"] == 53)...
так вы вибираете изначально из 51 которого нет в условии

Бернгардт
17.12.2016
21:27:41
еще неявный момент, если данные не нужны другие, зачем их выбирать?
$id2model = [
50 => 'MODEL_AUTO_RAZDEL',
53 => 'MODEL_AUTO_VW',
52 => 'MODEL_AUTO_SKODA',
54 => 'MODEL_AUTO_SEAT',
55 => 'MODEL_AUTO_PORSCHE',
56 => 'MODEL_AUTO_BENTLEY',
];
$model = $id2model [$arResult["ID"]];
$arFilter["!PROPERTY_".$model] = false;
не однокуйственно ли?
а вот or сразу становится не нужен

Folt
17.12.2016
21:32:33
я бы делал на оборот
выбирал услу по марке

Бернгардт
17.12.2016
21:33:03
а я прсото не понял задачу..
вот честно :(

Folt
17.12.2016
21:34:29

Roman
17.12.2016
21:35:37
задача все работало и нравилось. увечилилось кол-во марок и все перестало работать вообще. оптимизировать .. чтобы работало

Бернгардт
17.12.2016
21:37:28
ну то что менеджеры ставят так задачи - это не удивляет

Roman
17.12.2016
21:46:42
какие менеджеры ?

Google

Бернгардт
17.12.2016
21:51:10
обычно менеджеры рассуждают
все работало, ничего не тормозило, надо чтоб не тормозило
программисты - надо вот это, вот тут такие данные, пути решения
это не стеб, я правда не понял задачу
для меня она описана только как гипотетически увеличить скорость именно этого запроса, зачем он нужен, куда эти данные уходят, и нужны ли эти данные - так и осталось для меня загадкой

Roman
17.12.2016
21:53:09
сейчас вообще не работает ) если бы было что увеличивать.. просто висит страница и всею.

Бернгардт
17.12.2016
21:53:33
еще раз, что на этой странице должно быть?
при чем тут работает-не работает то?

Roman
17.12.2016
21:57:17
я сюда сбросил логику. есть 6 марок в них по 20 моделей где то. есть услуга. 51 инфоболок.. я по матрице вычисляю приналдежность к услуге и на странице вывожу список этих услуг.

Бернгардт
17.12.2016
21:58:27
нужен список услуг по этой марке, разбитый по кузовам чтоли? на детальной странице марки?

Roman
17.12.2016
21:58:34
вот услуга которая привязана к маркам -
4 колонки. при их сравнении и затыкается все.

Бернгардт
17.12.2016
21:59:10
как услуги хранятся я понял
я не понял где эти данные применяются, для чего данные собираются

Roman
17.12.2016
22:00:54
они не собираются, по этим связям выводится принадлежность к услуге. типа услуга ТТТТ, принадлежит к авто с ID 12,12,21,2,2,2,2 итп
а на странице выводится список всех услуг которые пренадлежат к авто.. это одна из них..


Бернгардт
17.12.2016
22:02:28
еще раз можно другими словами
надо по услуге получить модели авто к которым эта услуга применяется
или получить список услуг конкретного авто?
это разные задачи, но почему то ты одной доуточняешь другую..
или я опять не понял
если обе задачи надо решать на разных страницах - их по разному решать надо
если все авто которые к этой услуги - следуюет юзать getFields
если услуги этого кузова - то логику or тоже следует выбросить, а фильтрануть именно по этому кузову
ни в первом, ни во втором я не вижу даже надобности использовать or логику, потому и обращаю внимание на этот момент
а если всетаки надо собрать матрицу всех услуг и всех марок, о чем писали выше - то надо не издеваться над базой, а сделать один getlist и php повырезать необходимые данные в необходимом формате

Roman
17.12.2016
22:06:20
получить список услуг к конкретному авто

Бернгардт
17.12.2016
22:08:57
по авто получаем его модель
и вуаля
$modelId = id_модели
$modelName = code_модели;
$arFilter = Array(
"IBLOCK_ID"=>51,
"ACTIVE_DATE"=>"Y",
'PROPERTY_MODEL_AUTO_'.$modelName => $modelId
)
код свойства модели по его id получить же можно?

Google

Бернгардт
17.12.2016
22:10:21
из IBLOCK_ID вырезал arrray, ибо IN там тоже нечего делать
не уверен, но может простраивать вполне

Roman
17.12.2016
22:13:10
можно

Бернгардт
17.12.2016
22:14:44
ну и все, без этого страшного or будет летать
главное это не пускать циклически на больших списках авто
для больших список дешевле будет взять и сделать один проход без доуточнения модели, простроив матрицу связанных услуг
но тут уже решение будет зависить от кол-ва выводимых авто, и кол-ва услуг в базе которые попадают под фильтр, могут быть несколько разные рекомендации

Roman
17.12.2016
22:29:33
через CIBlockElement::GetList когда мы получаем данные по типу GetNext он выдает все что свяано с элементом, .. 99% из этого не используется в работе.. на выходе в массив это можно как-то фильтровать ?

Бернгардт
17.12.2016
22:30:29
select для этого
всмысле в arSelect прописываешь что тебе надо и профит.. хм
не вижу проблемы

Roman
17.12.2016
22:37:30
ну так вот это..
$arSelect = Array("NAME", "DETAIL_PAGE_URL", "SECTION_PAGE_URL", "PROPERTY_MODEL_AUTO_RAZDEL");
$arFilter = Array(
"IBLOCK_ID"=>array(51),
"ACTIVE_DATE"=>"Y",
"!PROPERTY_MODEL_AUTO_RAZDEL" => false
);
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
отдает все свойства по фильтру просто. все это даже TEXT с тегами
все переделал, заработало как нужно, спасибо за совет.

Бернгардт
17.12.2016
23:16:12
незашт

Иван
18.12.2016
05:48:09
все переделал, заработало как нужно, спасибо за совет.
Роман, вы очень не эффиктивно работает с платформой и жгете свое время. Задачи ваши типовые. Чтобы перестать идти методом тыка по каждой частной задачи - просто не Пожалейте время , посмотрите курс #1 и #2 , прорешайте примеры , там есть материалы с кодом.
https://academy.1c-bitrix.ru/training/course/
Вы свою эффективность в разы поднимите

Бернгардт
18.12.2016
09:23:00

Иван
18.12.2016
12:43:17
Какая разница, создание или доработка. Если ты понимаешь как решается задача, выкидываешь текущий код-хлам доставшийся в наследство и пишешь несколько строк, оптимально решающих задачу

Vite4eg
18.12.2016
13:01:23

Folt
18.12.2016
13:13:01

Иван
18.12.2016
13:13:05
Рассматриваем логически завершенный код, который на входе получил А, на выходе В. По хорошему это компонент, но у внутри компонента тоже можно выделить такие участки.
Если нужно внести изменения , то это невозможно сделать не разобравшись в логике изменяемого кода.
Иначе это будет метод тыка , "я внес изменения , а оно не работает или виснет."
Вообще очень важная грань. Или ты условный "веб-мастер", который изначально не программист (нет базы в в виде базданных, дискретных математик , алгоритмов и прочее ) , то ты работаешь на уровне готового компонента, или "гового модуля".
Или ты разработчик, но тогда ты обязан размышлять категориям какую задачу решаем, понимать какой алгоритм ее решения и как его реализовать в битрикс

Google

Иван
18.12.2016
13:13:34
Все остальное от лукавого

Folt
18.12.2016
13:18:58
есть и другая сторона
пришла задача получать быстрее из А значение B
так выходит, что в ходе решения всплывает, что в ходе получения B происходит еще какая то логика которая дополняет другие алгоритмы которые не касаются изначальной задачи.
суть сей басни такова, что время на изменения логики получения из A значения B провращается в переписывания половины проекта ))

Иван
18.12.2016
13:27:40

Folt
18.12.2016
13:36:47
ну, а посмотрите на это со стороны веб студий
иногда выходит как
клиент говорит "хочу в каталоге галачку" которая в итоге тянет за собой переписку пол проекта)

Иван
18.12.2016
13:52:49
Я на стороне веб-студий проработал больше чем внутри 1С-Битрикс.
Не очень пойму ваш тезис, который чем-то конкурирует с моими.
Вы пишите факт "есть задачи которые требуют переделки по проекта". Ок, конечно есть :)


Бернгардт
18.12.2016
14:00:22
Какая разница, создание или доработка. Если ты понимаешь как решается задача, выкидываешь текущий код-хлам доставшийся в наследство и пишешь несколько строк, оптимально решающих задачу
ну а теперь вернемся к нашим баранам
правильно в данном случае не у услуг ставить модели к которым они относятся, а у моделей ставить связанные услуги, тогда оно будет решаться нативными методами, ведь о этом решении вы говорили?
а это значит: надо мигрировать данные
за собой это потянет кроме текущего вывода еще в других местах
надо переучивать контенщиков что теперь данные заполняем от "обратного", причем не факт что это будет удобнее для них (а в первую очередь для них и пользывателей делается проект, а не для удовлетворения эго разработчика)
на стороне бизнеса это выглядит так - у вас все плохо, надо переделать тучу, а удобство контенщика мне класть..
вот и стоит ли оно этого? правильный ли это подход?
или вы какой то другой стандартный метод знаете, кроме как развернуть данные?


Den
18.12.2016
14:05:45
Народ, привет.
Подскажите, как выдернуть данные (профиль) покупателя (D7).
Если он уже делал заказ, чтоб автоматом подставить уже данные.

Folt
18.12.2016
14:07:38
согласен
самому приходится сталкиваться с неповоротливости проектов когда они разрастаются
со времененм изменения логики работы одного блока ведет за собок очень многое
хотя проект написан в модульном стиле
приходится при изменении одного модуля менять все остальные которые связанны с ним потому что для решения задачи меняется структура входных/выходные параметров

Admin
ERROR: S client not available

Бернгардт
18.12.2016
14:10:41
а не забываем просто про "слои" проекта
структура данных - это самый нижний слой
хорошо если оно закрыто полностью апи
(но на самом деле даже если есть апи, не стоит надеяться что оно используется, стоит проверять
а если это просто инфоблоки.. и вывод компонентами и апи битрикса.. ну стоит два раза подумать, прежде чем менять схему
и даже если надо менять, вот стопроцентно
сначала устраняем пожар если это возможно, а потом уже начинаем по тихоньку переделывать


Иван
18.12.2016
14:13:26
ну а теперь вернемся к нашим баранам
правильно в данном случае не у услуг ставить модели к которым они относятся, а у моделей ставить связанные услуги, тогда оно будет решаться нативными методами, ведь о этом решении вы говорили?
а это значит: надо мигрировать данные
за собой это потянет кроме текущего вывода еще в других местах
надо переучивать контенщиков что теперь данные заполняем от "обратного", причем не факт что это будет удобнее для них (а в первую очередь для них и пользывателей делается проект, а не для удовлетворения эго разработчика)
на стороне бизнеса это выглядит так - у вас все плохо, надо переделать тучу, а удобство контенщика мне класть..
вот и стоит ли оно этого? правильный ли это подход?
или вы какой то другой стандартный метод знаете, кроме как развернуть данные?
Нет, я не об этом.
Уже 2 вопроса получается обсуждаем, не спутывайте, а то совсем ценного в обсуждении не получим.
Первый тезис про знания платформы и разработки в целом.
Ну не годится подход, я что то внес в код, а оно не работает. Алгоритм работы кода, как работают API, в котором ты сейчас что то вынужден менять - нужно уметь читать.
Для прокачки знаний есть все - учебные курсы по БУС, документация по API.
По разработке в целом, базам данным , алгоритмам, и т.д. - тоже навалом.
Ну что за вопросы тут про определение получаемых полей, ну все же описано в доке. Или что оказывается в массив можно сложить данные чтобы потом можно было в 2х мечтах использовать.
Если кто то уже работает с такими задачами, но чувствуете что не хватает понимания что к чему значит нужно не в чатик за готовеньким ответом ходить, но и базу подтягивать.


Бернгардт
18.12.2016
14:14:22
а.. ну тогда извиняюсь
знания да, не хватает
но тут опять двадцать пять
про это писал долганин, про это писали даже гдето на битриксе в темах, но этого нет в доках, простой казалось бы вещи
!code=>false - зло, избегайте
и пока не вляпаешься, не узнаешь этого
и не поймешь если не раскурочишь разок-другой запрос
большинство же просто верят..
а сколько веры в орм (тут даже не о битриксе речь то)
рассматривают это как серебрянную пулю, а не увеличение скорости разработки в большинстве случаев
а что стоит понимать как оно под капотом это работает..
даже осознают не все.. по факту то.. если разобраться


Иван
18.12.2016
14:19:34
Второй тезис про цену изменений в проекте.
Мне кажется тут не может рецептов. Смотрите вместе с клиентом, стоит ли оно того или нет.
Мне кажется в ИТ это нормально. Запустили по быстрому не заморачиваясь с архитектурой. А сегодня она уже не позволяет проекту развиваться. Значит пора переделать.
Если это реальная потребность бизнеса, а не лишние 0,01 секунда чтобы было, то и контенщики переучаться , куда им деваться


Бернгардт
18.12.2016
14:22:52
ну в данном случае честнее было бы - оставить данные как есть, а на изменения услуг повесить хук и наполнять данные корректно в брендах
варианты всегда есть, а напрягать людей просто шоб было.. не совсем верно на мой взгляд
неудобство получения статистики ведет к человеческим ошибкам..
а человеческие сложнее устранить

Google

Mark
18.12.2016
15:36:08

Анатолий
18.12.2016
15:43:42


Бернгардт
18.12.2016
15:43:56
А можно подробнее про зло?)
возможно меня ктото поправит, возможно я ошибаюсь, исследования давние, просто скорее опасаюсь этого места и вот собственно причина
!code => ''
будет преобразован в запрос (условно)
where code <> ""
!code => false
будет преобразован в запрос
where code <> "" and code is not null
запросы которые is not null частенько, а при нескольких одновременно - постоянно не ложатся в ключи бд по определению, и могут привести к временным таблицам / фуллскану, что крайне негативно может сказаться на производительности как итог
если данных будет немного - временная таблица поместится в память и вы ничего не заметите.. а потом неожиданно херакс, и прилетели (ну я как то именно так вляпался)
тем более это было сказано в контексте задачи, которая была выше вчера
$arFilter = Array(
"IBLOCK_ID"=>array(51),
"ACTIVE_DATE"=>"Y",
array(
"LOGIC" => "OR",
array("!PROPERTY_MODEL_AUTO_RAZDEL" => false),
array("!PROPERTY_MODEL_AUTO_SKODA" => false),
array("!PROPERTY_MODEL_AUTO_VW" => false),
array("!PROPERTY_MODEL_AUTO_SEAT" => false),
array("!PROPERTY_MODEL_AUTO_PORSCHE" => false),
array("!PROPERTY_MODEL_AUTO_BENTLEY" => false)
)
);
данные этих property - мультисвойство
т.е. будут join на них, и да, если данных нет - будет гарантированный null, который не узнаешь, пока не соберешь
т.е. временная таблица на лицо
и да, это будет выполняться, пока временка ляжет в память, ну а потом...


Folt
18.12.2016
15:50:01
ага, то на этом обжигались)
когда временная таблица жрала по 20 гб оператоса было не весело)

Бернгардт
18.12.2016
15:50:36

Folt
18.12.2016
15:51:05
рамки
ну да, железка у нас та еще)

Бернгардт
18.12.2016
15:52:49
мм.. шикарные доступы у бд еще были, если столько рамы ей давалось :)
я видел сбор временки на жестком гыгы

Folt
18.12.2016
15:54:47
у нас сервак был сложен кастыльно, но держал хорошо
щя поставили битрикс вм
и о прошлой производительности остается только вспоминать

Бернгардт
18.12.2016
15:54:53
но мне в этом плане было проще.. когда я был маленький и зеленый, уже приходилось вручную обслуживать бд (весьма денормализованную) в 80к элементов с диким кол-вом доп.свойств по ним..
а времена это были 2003-2005, на весьма некислом тогда п4, аж с полугигом или уже гигом рамы на борту под все :) под виндой ессно)
была возможность поизучать как это чудо в стопор встает )

Folt
18.12.2016
15:54:54
хотя железо то же
кста, по поводу битрикс vm
то ли так норм, то ли чето то не так
слишком большой ответ сервера на BVM
это норм для нее ?

Бернгардт
18.12.2016
15:57:11
хм, не попадался на действительно отстойный ответ
мы на бой под бвм выставляемся нередко
хотя может под слишком большим мы разные цифры понимаем?

Folt
18.12.2016
15:59:10
http://joxi.ru/Q2KY1ywc4wXDZr
что бы не быть голословным
с 0.1 сек до 2 подсочил