2012-03-21 28 views
1

對不起,描述得不好的標題,無法想象如何將其詞組化。選擇其中x在y中的長度各不相同

使用具有分層視圖權限的系統。爲了更好地描述我的意思......

  0th tier 
     / \ 
    3   5 
/ \ / \ 
3004 3005 5004 5008 
/
3004001 

A的用戶節點(它們可以屬於多個)通過結構爲

ID | Node 
--------- 
20 | 3004 

一個用戶表分配可以屬於多個層次。在安全部分工作 - 屬於3004的人應該能夠編輯屬於3004001的人。

我不確定如何處理比較不同長度層以查看用戶應該能夠編輯的人。具體示例:用戶屬於3004以及5.我如何獲得3004以下和5以下的所有ID?

有沒有乾淨的,可重複使用的方法來做到這一點?不尋找勺子餵養的代碼,推動研究的正確方向將是美好的。謝謝!

+0

@Mark,這並不真正相關,它使用不同的方法來存儲分層數據。 – RedFilter 2012-03-21 15:06:07

+0

@RedFilter:這會教會我正確地閱讀這個問題! – 2012-03-21 15:07:27

回答

1

我假設節點是varchar或類似的。如果它是int,則需要執行一些操作才能使用下面的方法。目前還不清楚我是否在你的表ID是在UserID或沒有,所以我硬編碼的WHERE標準:

select n2.* 
from MyTable n1 
inner join MyTable n2 on n2.Node like n1.Node + '%' 
where n1.Node in ('5', '3004') 

如果ID其實UserID,你可以這樣做:

select n2.* 
from MyTable n1 
inner join MyTable n2 on n2.Node like n1.Node + '%' 
where n1.ID = @UserID 
+0

你曾經有過那些時刻?謝謝,一旦定時器讓我回答,我會標記爲答案。 – Snuffleupagus 2012-03-21 15:02:16

1

在WHERE子句中使用LIKE比較。

SELECT [ID] FROM Table WHERE [Node] LIKE '5_%' OR [Node] LIKE '3004_%' 

_%與「開始但不等於」類似。因此它不會與上面示例中的'5'或'3004'匹配,但會匹配'50'或'3004001'

相關問題