0

私が使用しているテーブルは3つあり、この問題が私のリーグから大きく外れていることが証明されています。

1つ目はこのような階層型テーブルです

USER_ID, USER_LEVEL, Store_Manager_ID, Team_Manager_ID
------------------------------------------------------
1, 0, -, -
2, 1, 1, -
3, 2, 1, 2
4, 2, 1, 2
5, 2, 1, 2

これは、ユーザーの階層を示しているだけです。つまり、ユーザー1のレベルは0です。つまり、彼はストアマネージャーであり、その上にストアマネージャーがいないため、ストアマネージャーIDは何もありません。また、チームマネージャーは明らかに何もありません。2番目のユーザーはチームマネージャーであるため、レベル= 1で、ストアマネージャーは1(最初の男)です。3番目、4番目、5番目は、それぞれ1歳未満と2歳未満の労働者です。

2つ目は、次のようなログインテーブルです。

USER_ID, EMAIL
--------------------------
1, john.smith@gmail.com
2, ron.jones@gmail.com
3, tom.graham@gmail.com
4, bill.small@gmail.com

メールはログインであり、パスワードではありません。

3つ目は、次のようなエイリアステーブルです。

USER_ID, ALIAS_ID
--------------------
2, 5

エイリアステーブルは、ユーザー5がユーザー2のエイリアスである方法を示しています。したがって、彼は同じ人物であり、同じログインを持っています。ただし、彼は同時に階層内の2つの場所、つまりチームマネージャーとワーカーに同時にいることができます。

私の質問はです。ユーザー2がエイリアス、つまりログイン前のワーカーとしてログインすることがわかっている場合。ユーザー2がログインするときに、レベルに基づいてユーザーアカウントのリーダーのIDを選択するにはどうすればよいですか。

たとえば、エイリアスアカウントでron.jones@gmail.com(ユーザー2)としてログインした場合です。ユーザー2のエイリアスIDは5であり、階層ユーザー5に基づくとレベル2、つまりワーカーであるため、ストアマネージャーではなくチームマネージャーのIDを返す必要があります。したがって、私は2、つまり自分自身を返します(この場合は少し奇妙ですが、要点以外に)

4

3 に答える 3

1

これはあなたが探している答えを与えるでしょう(私が質問を正しく理解しているなら):

SELECT team_manager_id
FROM   hierarchy h
INNER JOIN aliases a ON h.user_id = a.alias_id 
INNER JOIN login l ON a.user_id = l.user_id
WHERE  email = 'ron.jones@gmail.com';
于 2012-06-02T15:09:16.060 に答える
0
Select user_ID, User_level, Store_Manager_ID, Team_Manager_ID 
FROM Hierachy H 
INNER JOIN Alias A on A.Alias_ID = H.User_Id
Where A.User_ID = 2

仮定:1人のユーザーが複数のエイリアスを持っていない場合、同じユーザーに対して複数のレコードが返されます。

あなたが求めているのは5だけなので、hierachyのレコード2については気にしないと仮定します。

于 2012-06-02T15:03:44.853 に答える
0

私が正しく理解していれば、ユーザーまたはユーザーのエイリアスに基づいて、ユーザーのマネージャーが必要です。

次のクエリは、ユーザーテーブルとエイリアステーブルの2つの結合を実行します。

SELECT team_manager_id
FROM h.user_id = a.alias_id INNER JOIN
     login l
     ON a.user_id = l.user_id join
     hierarchy huser
     on huser.user_id = a.alias_id join
     hierarchy halias
     on halias.user_id = l.user_id
WHERE l.email = 'ron.jones@gmail.com' and
      huser.team_manager_id is not null and
      halias.team_manager_id is not null

また、マネージャーがnullでないことを確認し、エイリアスのマネージャーのみを返します。これにより、そのようなすべてのマネージャーが返されます。階層の最下位レベルからなど、特定のものが必要ですか?

于 2012-06-02T15:22:38.077 に答える