0

我使用了三张桌子,这证明这个问题超出了我的范围。

第一个是看起来像这样的层次表

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 什么都不是,团队经理显然什么都不是。第二个用户是团队经理,所以 level = 1,store manager 是 1(第一个人) 第三个,第四个和第五个分别是 1 和 2 岁以下的工人。

第二个是一个看起来像这样的登录表

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

邮箱是登录名,没有密码。

第三个是一个别名表,看起来像这样

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

别名表显示了用户 5 是用户 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 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

它还检查经理是否不为空,只返回别名上的经理。这将返回所有此类管理器。您是否需要一个特定的,例如从最低级别的层次结构?

于 2012-06-02T15:22:38.077 回答
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 个用户的别名不超过 1 个,如果有,您将为同一用户返回多条记录。

假设您不关心层次结构中的记录 2,因为您所追求的只是 5。

于 2012-06-02T15:03:44.853 回答