Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Хитрое дерево, подскажите как проще решить... / 10 сообщений из 10, страница 1 из 1
01.11.2002, 19:21:37
    #32064233
alexei1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрое дерево, подскажите как проще решить...
Пытаюсь запихать в таблицу ветвистое меню-дерево, и вроде бы все ок, нашел на форуме процедуру как выводить все ветки вместе, работает. Но вот проблема - так как это меню, то требуется в зависимости от выбранного пункта-ветки выводить не все ветки всего дерева, а только подветки выбранного пункта до выбранного уровня плюс ветки нулевого уровня (примерно как в Windows Explorer). Кто-нибудь уже может работал над этим, подскажите. Структура таблицы простая - зависимость по parentid
...
Рейтинг: 0 / 0
01.11.2002, 19:28:27
    #32064237
alexei1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрое дерево, подскажите как проще решить...
вот кому интересно, моя процедура для вывода всех веток, в предпоследней строке вставлено

"WHERE o.ParentTabID=@TabID OR o.ParentTabID=0"

с помощью которого я пытаюсь ограничить вывод. Это помогает, если выводить 2-й уровень, а вот если 3-й, то он только и выводится, а надо чтобы со вторым

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
меню1
меню2
.......подменю1
.......подменю2
..............подподменю1
.......подменю3
.......подменю4
меню4
меню5


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
CREATE PROCEDURE GetMenuTree 
(
    @TabID  int
)
AS

DECLARE @level int, @sublevel int
SET NOCOUNT ON

CREATE TABLE #outres 
(
	TabID 		int identity( 1 , 1 ) NOT NULL Primary Key,
	MsgId 		int NOT NULL Unique,
	ParentTabID	int NULL,
	LevelNum 	int NOT NULL,
	OrderByVal 	varchar( 255 ) NULL,
)

WHILE  1 = 1 

BEGIN
	SET @level=IsNull(@level, 0 )+ 1 
	
	INSERT INTO #outres (MsgId, ParentTabID, LevelNum)
	SELECT TabID, ParentTabID, @level
	FROM Tabs m
	WHERE (ParentTabID IN (SELECT MsgId FROM #outres) OR ParentTabID= 0 )
	AND TabID NOT IN (SELECT MsgId FROM #outres)
	ORDER BY TabOrder ASC 
	
	IF @@ROWCOUNT= 0  BREAK 
END

SET @sublevel= 1 

WHILE @sublevel<=@level

BEGIN
	UPDATE SELF SET OrderByVal=IsNull(parent.OrderByVal,'')+right('0000'+convert(varchar( 10 ),self.TabID), 5 )+'.'
	FROM #outres self
	LEFT JOIN #outres parent ON self.ParentTabID=parent.MsgId
	WHERE self.LevelNum=@sublevel
	
	SET @sublevel=@sublevel+ 1 
END

SELECT 
o.MsgId AS TabID, 
m.TabName, 
m.TabOrder, 
o.ParentTabID, 
o.LevelNum,
LTRIM(REPLICATE('---',o.LevelNum- 1 )+' '+m.TabName) AS ListTabName
FROM #outres o
INNER JOIN Tabs m ON o.MsgId=m.TabID
WHERE o.ParentTabID=@TabID OR o.ParentTabID= 0 
ORDER BY o.OrderByVal


GO
...
Рейтинг: 0 / 0
03.11.2002, 13:40:48
    #32064371
alexei1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрое дерево, подскажите как проще решить...
ни кто не знает?
...
Рейтинг: 0 / 0
03.11.2002, 14:21:59
    #32064372
Александр Степанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрое дерево, подскажите как проще решить...
Если хотите, можете связаться со мной по e-mail (адрес в профайле). Объясните поподробнее, что нужно, и помогу - есть опыт работы с деревьями.

С уважением,
Александр Степанов
...
Рейтинг: 0 / 0
04.11.2002, 18:57:44
    #32064692
Гнездин Петр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрое дерево, подскажите как проще решить...
Если я правильно понял задачу, то такая функция есть вот здесь:
http://www.pwr.ru/items/?id=3
Смотрите в конце после "P.S."
Я думаю, что переделать ее под ваши нужды не составит большого труда.
...
Рейтинг: 0 / 0
04.11.2002, 19:13:00
    #32064700
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрое дерево, подскажите как проще решить...
Гнездин Петр
Карбофос - это твой ник?
...
Рейтинг: 0 / 0
04.11.2002, 19:16:49
    #32064705
Гнездин Петр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрое дерево, подскажите как проще решить...
Хмм... ну да.
...
Рейтинг: 0 / 0
04.11.2002, 19:21:52
    #32064709
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрое дерево, подскажите как проще решить...
2Гнездин Петр
а сотовыми телефонами не занимался случайно?.....
...
Рейтинг: 0 / 0
04.11.2002, 19:30:09
    #32064715
Гнездин Петр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрое дерево, подскажите как проще решить...
В каком смысле? Я их не продавал, не импортировал, не разлочивал, не.... много чего :) Наверное это был все же не я...
Anyway продолжение наверное лучше в мыло, а то уж совсем какой-то жуткий оффтопик...
...
Рейтинг: 0 / 0
04.11.2002, 19:36:25
    #32064719
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрое дерево, подскажите как проще решить...
угу... упали в оффтопик.... ;)))
звиняте .... если что.....
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Хитрое дерево, подскажите как проще решить... / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]