2016-02-24 230 views
0

我有這些表:有沒有辦法用單個查詢來做到這一點?

home_table 
---------- 
home_id | home_name 

user_table 
--------- 
user_id | user_name 

user_home_rel_table 
---------- 
id | user_id | home_id 

(許多用戶可能屬於很多家庭)

我有一個API調用名爲/家庭/ 2 /用戶,我想返回的所有用戶ID爲2的家庭。

與呼叫一起,是當前用戶的用戶ID。

如果用戶屬於家庭(在本例中爲id 2),則允許他看到其他用戶。如果用戶存在於user_home_rel_table中,則該用戶屬於家庭:

user_home_rel_table 
---------- 
id | user_id | home_id 
---------------------- 
1 | $currentID | 2 
+0

所以,你想一個闕那是做什麼的?確定當前用戶是否在請求的房屋中,並且如果他是,顯示該房屋的所有用戶? – Dave

+0

從user_home_rel_table連接中選擇xxx ...其中home_id = 2並存在(從user_home_rel_table中選擇1,其中home_id = 2和user_id = $ currentID) –

回答

2

我相信這會給你你正在尋找的東西。我將$currentid$home_id作爲參數的佔位符。我還用名稱稍有不同的表,因爲我拒絕與_table附加在結尾處使用表名...;)

SELECT 
    U.user_id, 
    U.user_name 
FROM 
    User_Homes UH 
INNER JOIN User_Homes UH2 ON UH2.home_id = UH.home_id 
INNER JOIN Users U ON U.user_id = UH2.user_id 
WHERE 
    UH.user_id = $currentid AND 
    UH.home_id = $home_id -- 2 
+0

這似乎是訣竅:)太棒了!謝謝! 我完全同意這個命名,只是爲了讓這個例子更清楚;) –

1

這隻會返回的結果,如果$desiredUserID$desiredHomeID要求的家庭的一部分:

SELECT u.user_id, u.user_name 
FROM home_table h 
LEFT JOIN user_home_rel_table uh ON (uh.home_id = h.home_id) 
LEFT JOIN user_table u ON (uh.user_id = u.user_id) 
LEFT JOIN user_home_rel_table up ON (uh.home_id = up.home_id AND up.user_id = $desiredUserID) 
WHERE h.home_id = $desiredHomeID AND up.user_id IS NOT NULL 
1

我只是將使用湯姆H公司的版本(投影和對象名稱)提出的另一種方式

SELECT 
    U.user_id, 
    U.user_name 
FROM 
    User_Homes UH2 
    INNER JOIN Users U ON U.user_id = UH2.user_id 
WHERE 
    UH2.home_id = $home_id -- 2 
    AND EXISTS (SELECT 1 FROM User_Homes WHERE 
      user_id = $currentid AND home_id = $home_id) 
相關問題