2012-03-21 5 views
1

申し訳ありませんが記述されていないタイトルとそれをフレーズする方法を考えることができませんでした。さまざまな長さのxのyの部分を選択してください

階層ビュー権限を持つシステムで作業しています。より優れたユーザー・ノードは、(彼らは複数に属することができます)

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

ユーザーとして構成表を経由して割り当てられている

...私が何を意味するか

  0th tier 
     / \ 
    3   5 
/ \ / \ 
3004 3005 5004 5008 
/
3004001 
を説明するために、複数の階層に属することができます。 3004に属する人は3004001に属する人物を編集できるはずです。

さまざまな長さの層を比較してユーザーを編集できるようにする方法はわかりません。具体例:ユーザーは3004にも5にも属しています。すべてのIDを3004以下、5以下にするにはどうすればよいですか?

クリーンで再利用可能な方法はありますか?スプーンフィードコードを探しているわけではなく、研究対象の正しい方向へのプッシュはすばらしいでしょう。ありがとう!

+0

@Markこれは実際には関係ありません。 – RedFilter

+0

@RedFilter:それは私に質問を正しく読むように教えてくれるでしょう! –

答えて

1

ノードがvarcharまたはそれに類するものと仮定しました。 intの場合、以下の方法を使用するにはキャストを行う必要があります。あなたのテーブル内のIDUserIDしたかどうか私には明確ではなかったので、私は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

1

WHERE句でLIKE比較を使用します。

%は「〜で始まりますが、等しくない」と似ています。したがって、上記の例では '5'または '3004'と一致しませんが、 '50'または '3004001'と一致します。

関連する問題