powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Хитрое дерево, подскажите как проще решить...
10 сообщений из 10, страница 1 из 1
Хитрое дерево, подскажите как проще решить...
    #32064233
alexei1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытаюсь запихать в таблицу ветвистое меню-дерево, и вроде бы все ок, нашел на форуме процедуру как выводить все ветки вместе, работает. Но вот проблема - так как это меню, то требуется в зависимости от выбранного пункта-ветки выводить не все ветки всего дерева, а только подветки выбранного пункта до выбранного уровня плюс ветки нулевого уровня (примерно как в Windows Explorer). Кто-нибудь уже может работал над этим, подскажите. Структура таблицы простая - зависимость по parentid
...
Рейтинг: 0 / 0
Хитрое дерево, подскажите как проще решить...
    #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
Хитрое дерево, подскажите как проще решить...
    #32064371
alexei1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ни кто не знает?
...
Рейтинг: 0 / 0
Хитрое дерево, подскажите как проще решить...
    #32064372
Фотография Александр Степанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если хотите, можете связаться со мной по e-mail (адрес в профайле). Объясните поподробнее, что нужно, и помогу - есть опыт работы с деревьями.

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


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