我使用嵌套集(aka修改的預定義樹遍歷)來存儲組的列表,我試圖找到一種快速方法來生成麪包屑(作爲字符串,而不是表)爲所有的羣體一次。我的數據也使用鄰接列表模型進行存儲(有觸發器使兩者保持同步)。查找嵌套集的麪包屑
因此,例如:
ID Name ParentId Left Right
0 Node A 0 1 12
1 Node B 0 2 5
2 Node C 1 3 4
3 Node D 0 6 11
4 Node E 3 7 8
5 Node F 4 9 9
其表示樹:
- 節點A
- 節點B
- 節點C
- 節點d
- 節點E
- 節點F
- 節點B
我想能夠有一個返回表中的用戶定義的函數:
ID Breadcrumb
0 Node A
1 Node A > Node B
2 Node A > Node B > Node C
3 Node A > Node D
4 Node A > Node D > Node E
5 Node A > Node D > Node F
爲了使這個稍微複雜一些(儘管它有點超出了問題的範圍),但我也有需要遵守的用戶限制。因此,舉例來說,如果我只訪問ID = 3,當我運行查詢,我應該得到:
ID Breadcrumb
3 Node D
4 Node D > Node E
5 Node D > Node F
我有一個用戶定義的函數,它接受一個用戶ID作爲參數,並返回一個表與所有有效的組的ID,所以只要在查詢的某個地方
WHERE group.id IN (SELECT id FROM dbo.getUserGroups(@userid))
它會工作。
我有一個現有的標量函數可以做到這一點,但它只是沒有在組(需要>經10秒鐘2000組)的任何合理數量的工作。它將一個groupid和userid作爲參數,並返回一個nvarchar。它查找給定的組父母(1個查詢獲取左/右值,另一個查找父母),將列表限制爲用戶有權訪問的組(使用與上述相同的WHERE子句,以及另一個查詢),然後使用遊標遍歷每個組並將其附加到一個字符串,然後才能最終返回該值。
我需要一種快速運行的方法(例如,< = 1s)。
這是在SQL Server 2005上。
這隻適用於特定節點(currentid),並返回一個表,而不是一個字符串。此外,它應該是<= and > =包含的節點,ORDER BY留下來把他們在等級秩序。例如:對於 「節點F」,ID 5,它會返回: 0節點A 3節點d 4節點F 那部分,我知道該怎麼做。我想將「節點A>節點D>節點F」作爲字段返回,並在一個大查詢中爲每個組執行此操作。 – gregmac 2009-04-30 22:40:06
嗯SQL服務器的技能不走那麼遠,我可能會處理這件事我的數據庫之外。 – Evert 2009-04-30 23:07:13