Нужно реализовать запросом или хранимкой, выборку из таблицы чтобы в результате были кортежи в порядке Родитель-Потомок.
Структура полей: ID(Primary Key), PARENT(ссылка на родителя), т.д.
CREATE FUNCTION GetGroupsNames(@SubGroupID AS int)
RETURNS nvarchar(2000)
AS
BEGIN
DECLARE @s nvarchar(255), @ss nvarchar(2000)
SET @ss = ''
WHILE NOT @SubGroupID IS NULL
BEGIN
SELECT @SubGroupID=ParentID,
@s=Group
FROM dbo.tblGroups
WHERE ID_Group=@SubGroupID
IF NOT @s IS NULL
BEGIN
IF LEN(@ss)>0
SET @ss='/'+@ss
SET @ss=@s+@ss
END
END
RETURN @ss
END
SELECT GetGroupsNames([GroupID], * FROM MyTable
Точно не потомком?snov писал(а):... если PARENT>0, то он является предком какого-либо кортежа ...
Ага потомком, очепаткаEnnor писал(а):Точно не потомком?snov писал(а):... если PARENT>0, то он является предком какого-либо кортежа ...
И еще, не совсем понятно, что именно тебе нужно. Входные условия какие?
ID | PARENT | Какие-то данные
----------------------------------
1 | 0 | xxx
2 | 0 | xxx
3 | 1 | xxx
4 | 0 | xxx
5 | 3 | xxx
6 | 1 | xxx
8 | 1 | xxx
9 | 2 | xxx
10 | 5 | xxx
ID | PARENT | Какие-то данные
-------------------------------------
1 | 0 | xxx
3 | 1 | xxx
5 | 3 | xxx
6 | 1 | xxx
8 | 1 | xxx
2 | 0 | xxx
9 | 2 | xxx
4 | 0 | xxx
10 | 4 | xxx
Я правильно понял, что тебе нужно одним запросом вернуть всю таблицу, просто неким хитрым образом отсортированную?snov писал(а):... Выбрать нужно не только потомков, какого-либо предка, но и его самого. И такое по всем предкам...
Ennor писал(а):ну, в общем, непорядочек.
Именно!Ennor писал(а):Я правильно понял, что тебе нужно одним запросом вернуть всю таблицу, просто неким хитрым образом отсортированную?
Глубина может быть и больше(теоретически), практически вряд лиalibek писал(а):Ну понятно, что не один, но юзер то этого не знает
Но если заранее известна максимальная глубина вложенности (и она не слишком большая, 2-3 вложения), то можно обойтись и одним; в этом случае можно даже без хранимой процедуры обойтись.
snov писал(а):Нужно реализовать запросом или хранимкой, выборку из таблицы чтобы в результате были кортежи в порядке Родитель-Потомок.
Структура полей: ID(Primary Key), PARENT(ссылка на родителя), т.д.
codemaster писал(а):прекрестный запрос ?
см. http://www.rsdn.ru/Forum/?mid=645878
CREATE PROCEDURE spTest
AS
DECLARE @t TABLE([ID] int, F smallint DEFAULT 2, S varchar(255))
INSERT INTO @t ([ID], S) SELECT [ID], CAST([ID] AS varchar) FROM Test WHERE [Parent]=0
WHILE @@ROWCOUNT >0
BEGIN
INSERT INTO @t ([ID], S) SELECT T.[ID], U.S + ',' + CAST(T.[ID] AS varchar)
FROM Test T INNER JOIN @t U ON T.[Parent]=U.[ID]
WHERE U.F=1
UPDATE @t SET F=F-1 WHERE F>0
END
SELECT T.* FROM Test T INNER JOIN @t R ON T.[ID]=R.[ID] ORDER BY S
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1