我使用了三张桌子,这证明了这个问题远远超出了我的联盟。
第一个是层次结构表,看起来像这样
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,商店经理是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,即他自己(在这种情况下有点离奇,但除此之外)
答案 0 :(得分: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';
答案 1 :(得分: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个别名,如果是,您将为同一个用户返回多个记录。
假设你并不关心在hierachy中的记录2,因为你所追求的只是5。
答案 2 :(得分: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
它还会检查管理器是否为空,仅返回别名上的管理器。这将返回所有此类经理。你需要一个特定的,从层次结构的最低层开始吗?