Lotsia PLM: Форум по семейству систем PLM/PDM/TDM/ERP/Workflow

Для специалистов по внедрению систем, профессиональных администраторов и пользователей.
Текущее время: 19 ноя 2018, 21:41

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: 19 мар 2008, 09:45 
Не в сети
Активный участник
Аватара пользователя

Зарегистрирован: 24 авг 2006, 08:06
Сообщения: 1646
Откуда: 55.745578,37.665825
Благодарил (а): 8 раз.
Поблагодарили: 3 раз.
Задача простая в в массив WorkFlow максимально бысто загрузить все атрибуты одного объекта

запрос например такой

Код:
SELECT Coalesce(vv.value,''),
       Coalesce(vv0.value,''),
       rw.description ,
       Coalesce(vv1.value,''),
       Coalesce(vv2.value,''),
       Coalesce(vv3.value,''),
       Coalesce(vv4.value,''),
       Coalesce(vv5.value,''),
       Coalesce(vv6.value,''),
       Coalesce(vv7.value,''),
       Coalesce(vv8.value,''),
       Coalesce(vv9.value,'')
  FROM lsdbo.object_reference_view rw left
       join lsdbo.object_type_view tw on rw.type_id = tw.id left
       join lsdbo.attrib_value_view av on rw.id = av.object_id and av.attrib_id = 100000016000000 left
       join lsdbo.value_string_view vv on av.value_id = vv.id and av.attrib_id = 100000016000000 left
       join lsdbo.attrib_value_view av0 on rw.id = av0.object_id and av0.attrib_id = 3000000000002 left
       join lsdbo.value_string_view vv0 on av0.value_id = vv0.id and av0.attrib_id = 3000000000002 left
       join lsdbo.attrib_value_view av1 on rw.id = av1.object_id and av1.attrib_id = 3000000000022 left
       join lsdbo.value_string_view vv1 on av1.value_id = vv1.id and av1.attrib_id = 3000000000022 left
       join lsdbo.attrib_value_view av2 on rw.id = av2.object_id and av2.attrib_id = 3000000000021 left
       join lsdbo.value_string_view vv2 on av2.value_id = vv2.id and av2.attrib_id = 3000000000021 left
       join lsdbo.attrib_value_view av3 on rw.id = av3.object_id and av3.attrib_id = 3000000000024 left
       join lsdbo.value_string_view vv3 on av3.value_id = vv3.id and av3.attrib_id = 3000000000024 left
       join lsdbo.attrib_value_view av4 on rw.id = av4.object_id and av4.attrib_id = 3000000000023 left
       join lsdbo.value_string_view vv4 on av4.value_id = vv4.id and av4.attrib_id = 3000000000023 left
       join lsdbo.attrib_value_view av5 on rw.id = av5.object_id and av5.attrib_id = 3000000000025 left
       join lsdbo.value_string_view vv5 on av5.value_id = vv5.id and av5.attrib_id = 3000000000025 left
       join lsdbo.attrib_value_view av6 on rw.id = av6.object_id and av6.attrib_id = 3000000000041 left
       join lsdbo.value_string_view vv6 on av6.value_id = vv6.id and av6.attrib_id = 3000000000041 left
       join lsdbo.attrib_value_view av7 on rw.id = av7.object_id and av7.attrib_id = 3000000000042 left
       join lsdbo.value_string_view vv7 on av7.value_id = vv7.id and av7.attrib_id = 3000000000042 left
       join lsdbo.attrib_value_view av8 on rw.id = av8.object_id and av8.attrib_id = 3000000000043 left
       join lsdbo.value_string_view vv8 on av8.value_id = vv8.id and av8.attrib_id = 3000000000043 left
       join lsdbo.attrib_value_view av9 on rw.id = av9.object_id and av9.attrib_id = 3000000000062 left
       join lsdbo.value_string_view vv9 on av9.value_id = vv9.id and av9.attrib_id = 3000000000062

where  rw.type_id = tw.id and
       rw.id =4000000024410 -- единственный параметр id объекта


т.е. есть запрос есть один параметр

как средствами SQL можно разогнать данный запрос?

с одной стороны сделать свой View без проверки прав - но в вид нельзя передать параметр?

с другой стороны может хп свою сделать которая будет создавать вид?

что посоветуете?
нужна максимальная скорость + передача одного параметра + возврат таблицы

_________________

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



Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 19 мар 2008, 12:16 
Не в сети
Активный участник
Аватара пользователя

Зарегистрирован: 15 июл 2004, 13:15
Сообщения: 777
Откуда: Тюмень
Благодарил (а): 6 раз.
Поблагодарили: 8 раз.
в этом запросе, если я правильно понял, все данные будут в одно строчку. и работает такое скорее всего не быстро :-(
можно попробовать получить данные в том виде, в котором их обычно показывает Лоция, то есть в столбик, название атрибута и его значение. можно использовать вот такой запрос:
Код:
select  attr.description, vs.value
from
lsdbo.value_string_view vs
, lsdbo.attrib_view attr
where
vs.id in
(
select value_id
from lsdbo.attrib_value_view
where
object_id = 111111163000000
)
and
vs.attrib_id = attr.id

это конечно одному типу атрибутов, по строковым.. но зато выполняется махом, даже по стандартным видам с правами..
если сделать еще запросы к числам и датам - будут все атрибуты..
а вот как это сделать в одном запросе - честно говоря, не соображу..
но в трех отдельных - запросто :-)

если нужен вид именно в строку, то можно как раз и использовать виды без учета прав.. сообственно, начинаю отвечать на вопрос ;-)
можно сделать свой вид, который будет использовать сами таблицы (текст этого вида - почти такой же, какой вы привели выше (но надо заменить виды на таблицы, добавить колонку с ИД объекта и убрать фильтрацию по ИД объекта )).
а потом просто делать запрос к этом виду и уже там в where указывать object_id = .......
должно работать..

_________________
лучше день потерять, потом за пять минут долететь!


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 19 мар 2008, 12:36 
Не в сети
Активный участник
Аватара пользователя

Зарегистрирован: 24 авг 2006, 08:06
Сообщения: 1646
Откуда: 55.745578,37.665825
Благодарил (а): 8 раз.
Поблагодарили: 3 раз.
данные выводятся не в строку (,) - в таблицу ( ну в принципе в одну строку конечно состоящую из разных колонок) - для дальнейшего использования в многомерном массиве Workflow

на счет работы по общим таблицам с последующей фильтрацией вида - нужно подумать :roll: может это и выход

:wink:

_________________

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



Последний раз редактировалось Александр 19 мар 2008, 14:20, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 19 мар 2008, 14:09 
Не в сети
Активный участник
Аватара пользователя

Зарегистрирован: 24 авг 2006, 08:06
Сообщения: 1646
Откуда: 55.745578,37.665825
Благодарил (а): 8 раз.
Поблагодарили: 3 раз.
Андрей - твой запрос то что надо

но еще два момента
1. как развернуть результаты запроса из столбца 1хN в строку Nx1 (скорее всего средствами Лоции - в SQL хп городить неохота или может можно твой запрос как нибудь наполнить подзапросами - для образования колонок)?
2. как выводить колонки в нужном мне порядке ?

_________________

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



Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 19 мар 2008, 14:53 
Не в сети
Активный участник
Аватара пользователя

Зарегистрирован: 15 июл 2004, 13:15
Сообщения: 777
Откуда: Тюмень
Благодарил (а): 6 раз.
Поблагодарили: 8 раз.
быстро работает, да? ;-)

моменты...
ну, с этим сложнее..
если городить подзапросы - то получится ВАШ запрос.. и скорость тоже изменится :-(
а вот средствами Лоции - может быть и можно попробовать.. вот только надо ли... ведь если показываем информацию об ОДНОМ объекте, то получается более компактный вид, если делать два столбика - с названием и значением.. не зря в Лоции именно такой вид ;-)
порядок - тоже вопрос. в лоции выводится в алфавитном порядке, причем там ещу участвуют названия групп атрибутов. в принципе, здесь тоже можно сделать так, вот код по алфавиту, но без названий групп атрибутов (если нужно):
Код:
select  attr.description as 'desc', vs.value
from
lsdbo.value_string_view vs
, lsdbo.attrib_view attr
where
vs.id in
(
select value_id
from lsdbo.attrib_value_view
where
object_id = 100000813200015
)
and
vs.attrib_id = attr.id
order by 'desc'

в принципе, может быть можно сделать и свой порядок, если каждому названию атрибута сопоставить какой нить код (или в запросе, или уже в лоции через вычисляемое поле) и сортировать по этому коду (или вычисляемому полю)...
ну это все я говорю для того случая, когда вид останется, как есть, то есть два столбика со названиями и значениями..

_________________
лучше день потерять, потом за пять минут долететь!


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 19 мар 2008, 14:59 
Не в сети
Активный участник
Аватара пользователя

Зарегистрирован: 24 авг 2006, 08:06
Сообщения: 1646
Откуда: 55.745578,37.665825
Благодарил (а): 8 раз.
Поблагодарили: 3 раз.
вот если бы в Лоции можно было наполнять массив не горизонтально а вертикально - т.е. сопоставлять значения запроса не колонкам а строкам - вопрос бы был исчерпан :wink: :wink: :wink:

твой запрос ну очень быстро работает - ну очень хочется его использовать - но поворот нужен обязательно :wink: :wink:
думаю короче :wink: :wink:
как рыбку съесть и как запрос использовать

_________________

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



Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 19 мар 2008, 15:09 
Не в сети
Активный участник
Аватара пользователя

Зарегистрирован: 24 авг 2006, 08:06
Сообщения: 1646
Откуда: 55.745578,37.665825
Благодарил (а): 8 раз.
Поблагодарили: 3 раз.
Андрей - если не сложно подскажи - можно ли всетаки в твой запрос вставить подзапросы

т.е. мы сделали выборку всех строковых атрибутов объекта
и теперь можно ли в этом же запросе по id отобранных атрибутов произвести выборку только нужных из них, т.е получить нужные столбцы в нужном порядке??
Код:
Select
   (Select значения атрибута по его id...
   (Select значения атрибута по его id...
   (Select значения атрибута по его id...
   (Select значения атрибута по его id...
From ...
Where отобрать id всех строковых атрибутов объекта


просто понять не могу возможно ли это в принципе?

_________________

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



Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 19 мар 2008, 15:14 
Не в сети
Активный участник
Аватара пользователя

Зарегистрирован: 15 июл 2004, 13:15
Сообщения: 777
Откуда: Тюмень
Благодарил (а): 6 раз.
Поблагодарили: 8 раз.
работа с ИТ - это поиск компромиссов. не факт, что получится сделать ИМЕННО ТАК, как хочет заказчик или разработчик.
и кстати, дело не в Лоции. ограничения есть везде - и в другим подобных системах, и даже в средах разработки ;-)
мне все же кажется, что если показываем все атрибуты ОДНОГО объекта - то можно и в столбик.
порядок - это уже хитрее, я некоторые мысли уже говорил..
а если все таки переворачивать - в принципе что можно сделать.
можно сделать преобразование одного массива в другой, все это на уровне действий над переменными в шаблоне. я так понимаю, что массив с названиями и значениями атрибутов удалось уже увидеть в Лоции, только внешний вид не нравится, да? если массивы есть - то можно попытаться их преобразовать.
а в принципе, можно просто сделать получение атрибутов объекта силами тех же действий над переменными. в крайнем случае - действием над объектами.. че то я сразу об этом не подумал..

_________________
лучше день потерять, потом за пять минут долететь!


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 19 мар 2008, 15:20 
Не в сети
Активный участник
Аватара пользователя

Зарегистрирован: 24 авг 2006, 08:06
Сообщения: 1646
Откуда: 55.745578,37.665825
Благодарил (а): 8 раз.
Поблагодарили: 3 раз.
ни в коем случае никаких действий
твой запрос настолько поразил меня скоростью - что я хочу только средствами SQL :wink: :wink: :wink:

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

так думаем дальше :wink:
круто, круто :wink: :wink: :wink:

_________________

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



Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 19 мар 2008, 15:42 
Не в сети
Активный участник
Аватара пользователя

Зарегистрирован: 27 июл 2006, 22:17
Сообщения: 797
Откуда: Москва
Благодарил (а): 11 раз.
Поблагодарили: 12 раз.
Александр, а тебе нужен именно массив, чтобы с ним потом поработать или просто строчка с информацией по одному объекту?
Я тут подумал, что если просто строчка, то может быть использовать f_ExecSQLSelect? Он-то как в одну строчку все и вытягивает.

_________________
"Лучше меньше, да лучше" (C)


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 19 мар 2008, 15:52 
Не в сети
Активный участник
Аватара пользователя

Зарегистрирован: 24 авг 2006, 08:06
Сообщения: 1646
Откуда: 55.745578,37.665825
Благодарил (а): 8 раз.
Поблагодарили: 3 раз.
проблема простая - работаем в WorkFlow
нужно разместить на форме информацию о 5 объектах причем данная информация в дальнейшем пойдет на формирование отчета

что было сначала - в Party я знал id всех 5 объектов и в действии отбирал их атрибуты и в качестве аргументов (порядка 50 штук) передавал их в отчет (это вылавливание атрибутов занимало достаточно много времени)

теперь в Workflow я хочу сразу вытащить все атрибуты на форму
чтобы потом уже из переменных формы формировать аргументы отчета
проблема в том что атрибутов у каждого объекта 10 штук - т.е. делать 50 переменных не имеет смысла
я формирую массив 5х10
и в аргументы отчета отправляю значения нужных колонок из полученного массива

и вернувшись к теме - опять же, вылавливание атрибутов уже средствами WorkFlow - все равно занимает достаточно времени - меньше чем в действии но тоже не мало

вот и бьюсь :wink: :wink:
как максимально компактно и максимально много данных вытащить на форму причем затратив минимальное количество времени

_________________

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



Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 19 мар 2008, 20:30 
Не в сети
Активный участник
Аватара пользователя

Зарегистрирован: 27 июл 2006, 22:17
Сообщения: 797
Откуда: Москва
Благодарил (а): 11 раз.
Поблагодарили: 12 раз.
Слушай, а у тебя запрос в Query Analyzer'е и в Лоции одинаково по времени выполняется?

_________________
"Лучше меньше, да лучше" (C)


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 20 мар 2008, 07:22 
Не в сети
Активный участник
Аватара пользователя

Зарегистрирован: 24 авг 2006, 08:06
Сообщения: 1646
Откуда: 55.745578,37.665825
Благодарил (а): 8 раз.
Поблагодарили: 3 раз.
никогда не задумывался над этим вопросом - по ощущениям вроде одинаково :wink:

_________________

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



Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 20 мар 2008, 07:50 
Не в сети
Активный участник
Аватара пользователя

Зарегистрирован: 27 июл 2006, 22:17
Сообщения: 797
Откуда: Москва
Благодарил (а): 11 раз.
Поблагодарили: 12 раз.
Я просто подумал, что подтормаживать может сама раскладка по массивам. Но раз нет, так нет.

_________________
"Лучше меньше, да лучше" (C)


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 20 мар 2008, 14:20 
Не в сети
Активный участник
Аватара пользователя

Зарегистрирован: 24 авг 2006, 08:06
Сообщения: 1646
Откуда: 55.745578,37.665825
Благодарил (а): 8 раз.
Поблагодарили: 3 раз.
Андрей а можешь нарисовать тот же запрос к строковым атрибутам объекта но с условием чтобы он показывал все атрибуты объекта вне зависимости от того есть этот атрибут физически у объекта или нет

просто в таком виде для объектов одного типа он показывает для одного объекта (у меня) одно количество а для другого другое (просто не все используются)

можно в этом запросе использовать таблицу привязки атрибутов к типу объекта?

просто понять не могу как это сделать?
в этом случае если все атрибуты будут стоять в запросе четко на своих местах - я уже смогу работать с ними по индексу

_________________

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



Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB