Скрипт: Перебор дочерних объектов без отметки в атрибуте

Обсуждение технических вопросов работы с системами управления базами данных (СУБД), работе с языком SQL и скриптовыми языками.
Ответить
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Скрипт: Перебор дочерних объектов без отметки в атрибуте

Сообщение Александр »

Может кому понадобится
Лоция предлагает перебирать дочерние объекты в цикле используя для исключения обработанных объектов - два момента - найти max id и проставить отметку в атрибуте...
но можно же гораздо проще и главное быстрее - искать min id сохранять его в переменной и следующий проход делать по сохраненному значению
например выбрать все объекты с направленной связью

Код: Выделить всё

Current_id=Set(0)
...
sql = Set ('
SELECT min(rw.id)  
  FROM LSDBO.object_reference_view rw,
       lsdbo.tree_link_view tl 
 WHERE tl.parent_id =100004656200000 
       and tl.link_id =rw.id 
       and tl.link_type_id = 11
       and rw.id>'+string(Current_id))
Current_id= Set ( number( f_ExecSQLSelect_2 ( sql,'','')) )
... 
зацикливаем
и скорость больше :wink:
и атрибуты целее :wink:

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Аватара пользователя
Старик Крупский
Активный участник
Сообщения: 803
Зарегистрирован: 27 июл 2006, 22:17
Откуда: Москва

Сообщение Старик Крупский »

Отличная, кстати, мысль!!! Я этим пользуюсь, но не пришло в голову поделиться, думал и так все знают. Но на самом деле, пометка в атрибутах тоже иногда может пригодиться.
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Сообщение Александр »

предлагаю еще больше ускориться :wink:
допустим в запросе отбирающем дочерние объекты влепить top25
т.е. отбираем первые 25 id например так (тут простой запрос для примера - но лучше конечно чтобы был сложный)

Код: Выделить всё

tmp = Set ( f_execsqlselect_2 ('
SELECT top 25 rw.id 
  FROM LSDBO.object_reference_view rw,
       lsdbo.tree_link_view tl
 WHERE tl.parent_id =100004656200000
       and tl.link_id =rw.id
       and tl.link_type_id = 11','', ',') )

получаем строку из id через запятую
а дальше в цикле вырезаем очередной id и выходим на объект простым и быстрым запросом

tmp=set(left(tmp,',',1))
id = Set ( number(f_ExecSQLSelect_2 ('
SELECT rw.id 
  FROM  lsdbo.object_reference_view rw
WHERE rw.id='+string(id),'','') )
т.е. чтобы каждый раз не гонять сложный запрос делаем выборку - кешируем ее, быстро обрабатываем и т.д.
на сложном первом запросе должно работать быстро :wink: :wink: на простом конечно - не имеет смысла - а может и имеет :roll:

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Ответить