Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Деревья в MS SQL
|
|||
|---|---|---|---|
|
#18+
Структура справочника следующая: ID - идентификатор строки ,ParentID - идентификатор родителя(группы) ,IsFolder - признак группы, т.е. есть подчиненные элементы ,descr и т.д. уровень вложенности от 4 до 9 Есть потребность: 1. Выбрать элементы принадлежащие заданной группе? 2. Определить принадлежит ли заданный элемент заданной группе? Структура таблиц изменению не подлежит (это справичник 1С) Новые таблицы создавать можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2001, 11:55 |
|
||
|
Деревья в MS SQL
|
|||
|---|---|---|---|
|
#18+
Где то тут уже про это говорилось... 2. Ну по паренту от элемента подняться и проверять, не совпадают ли ID каждого следующего уровня заданной группе 1. Просто список элементов, или деревом? Можно при помощи таблиц-переменных, хотя 1С под 7.5, тогда временных таблиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2001, 12:52 |
|
||
|
Деревья в MS SQL
|
|||
|---|---|---|---|
|
#18+
1. select * from YuorTable where id = Заданна_ группа 1.1 select * from YuorTable where parentid = ID_Заданной_группы 2. if exists(select * from YuorTable where id = Заданна_ группа) тогда Вам нужно учить SQL Если Вам нужно проверять все уровни вложенности, то скажите. Напишу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2001, 00:26 |
|
||
|
Деревья в MS SQL
|
|||
|---|---|---|---|
|
#18+
Примерно так: CREATE TABLE #Hierarchy ( ID int NOT NULL PRIMARY KEY, ParentID int NULL, IsFolder int NOT NULL, Descr nvarchar(100) NOT NULL ) Insert Into #Hierarchy VALUES(1,NULL,1,'Folder1') Insert Into #Hierarchy VALUES(2,NULL,1,'Folder2') Insert Into #Hierarchy VALUES(3,NULL,1,'Folder3') Insert Into #Hierarchy VALUES(4,NULL,1,'Folder4') Insert Into #Hierarchy VALUES(11,1,1,'Folder11') Insert Into #Hierarchy VALUES(12,1,1,'Folder12') Insert Into #Hierarchy VALUES(110,11,0,'Item110') Insert Into #Hierarchy VALUES(120,12,0,'Item120') Insert Into #Hierarchy VALUES(121,12,1,'Folder121') Insert Into #Hierarchy VALUES(1210,121,0,'Item1210') /****************************************************************** Выбрать элементы, принадлежащие заданной группе. ID Группы поместить в переменную @ID Поместить туда NULL если требуется выбрать все элементы справочника ******************************************************************/ DECLARE @ID int Set @ID=NULL DECLARE @Level int Set @Level=1 create table #tmp1(id int not null,[level] int not null, path nvarchar(3000) not null) If @ID Is NULL Insert Into #tmp1 Select id, @level, descr From #Hierarchy WHERE ParentID Is NULL ELSE Insert Into #tmp1 Select id, @level, descr From #Hierarchy WHERE ParentID=@ID WHILE @@rowcount>0 BEGIN Set @level=@level+1 Insert Into #tmp1 Select h.id, @level, t.path+CHAR(0)+h.descr From #tmp1 t inner join #Hierarchy h on t.id=h.Parentid and t.[level]=@level-1 END /***************************************************** Вывод результатов в иерархическом виде *****************************************************/ Select t.id, SPACE((t.[level]-1)*5)+h.Descr, h.IsFolder From #tmp1 t inner join #Hierarchy h on t.id=h.id Order By t.path drop table #tmp1 /********************************************************** Определить, принадлежит ли заданный элемент @Item заданной группе @Folder **********************************************************/ DECLARE @Item int, @Folder int Set @Item=120 Set @Folder=1 DECLARE @Folder1 int Select @Folder1=ParentID from #Hierarchy where ID=@Item WHILE @Folder1 Is Not NULL BEGIN If @Folder1=@Folder BEGIN Select @Item As Item,'содержится в папке',@Folder BREAK END Select @Folder1=ParentID from #Hierarchy where ID=@Folder1 END If @Folder1 Is NULL Select @Item As Item,'не содержится в папке',@Folder drop table #Hierarchy С уважением, Александр Степанов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2001, 06:47 |
|
||
|
Деревья в MS SQL
|
|||
|---|---|---|---|
|
#18+
Спасибо за совет "Изучите SQL" И вот Что получилось: DECLARE @level int CREATE TABLE #stack (ID char(9), level1 int, descr char(180)) /*Insert #Stack select id , 1 , Descr from sc656 where ltrim(ParentId)='0' and IsFolder=1*/ Insert #Stack select id , 1 , Descr from sc656 where ltrim(Code)='1559' Select @level = 2 WHILE @level < 10 BEGIN Insert #Stack select n.ID, @Level , rtrim(St.Descr)+'\'+RTrim(n.Descr) from sc656 n, #Stack st where n.parentID In (select s.ID from #stack s) and n.ID Not In (select s.ID from #stack s) /*and n.IsFolder=1*/ and n.ParentId=st.Id IF @@ROWCOUNT = 0 break SELECT @level = @level + 1 END -- WHILE select * from #Stack /*select descr, sp4964 Dat from sc656 n where n.Parentid in (select s.id from #Stack s) and n.IsFolder=2 and sp4964 > '2001-09-01' order by Descr, Dat desc*/ drop table #Stack ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2001, 09:52 |
|
||
|
|

start [/forum/topic.php?fid=46&gotonew=1&tid=1825336]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
59ms |
get topic data: |
12ms |
get first new msg: |
7ms |
get forum data: |
3ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 257ms |
| total: | 409ms |

| 0 / 0 |
