2012-06-02 25 views
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,這意味着他是商店經理,所以他沒有商店經理,所以他的商店經理身份證是什麼都沒有,團隊經理顯然沒有。 第二個用戶是團隊經理,所以level = 1和store manager是1(第一個人) 第三,第四和第五個分別是1和2以下的工人。

二是登錄表看起來像這樣

USER_ID, EMAIL 
-------------------------- 
1, [email protected] 
2, [email protected] 
3, [email protected] 
4, [email protected] 

電子郵件是登錄,沒有密碼。

第三個是別名表看起來像這樣

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

別名表顯示用戶5如何爲用戶2的別名,所以他是同一個人,並且具有相同的登錄。然而,他可以同時在兩個層次上分別擔任球隊經理和一名工作人員。

我的問題是。 如果我知道用戶2將作爲他的別名(即登錄前的工作人員)登錄。 當用戶2登錄時,如何根據級別選擇用戶帳戶的領導者的ID。

例如,如果我在我的別名帳戶下以[email protected](用戶2)身份登錄。 用戶2的別名ID是5,並且基於層次用戶5是級別2,即工作人員,所以我應該返回他的團隊經理的ID而不是他的商店經理。 所以我會再回到2,即本人(有點匪夷所思在這種情況下,但除了點)

+1

你怎麼知道有人以他的別名登錄而不是他自己? –

+1

不同的數據庫處理事情的方式不同,並且可能會有完全不同的語法 - 您正在使用哪種語言? –

回答

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 = '[email protected]'; 
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別名,如果這樣做你」我會爲同一個用戶取回多個記錄。

假設你在層次結構不CAREA回合記錄2,因爲所有你後5

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 = '[email protected]' and 
     huser.team_manager_id is not null and 
     halias.team_manager_id is not null 

它還檢查,經理不爲空,僅返回上的別名經理。這將返回所有這些經理。你需要一個特定的,從層次結構的最底層說出來嗎?