我有这些表格:
home_table
----------
home_id | home_name
user_table
---------
user_id | user_name
user_home_rel_table
----------
id | user_id | home_id
(许多用户可能属于许多家庭)
我有一个名为/ homes / 2 / users的api调用,我想返回ID为2的所有用户。
与呼叫一起,是当前用户的用户ID。
如果用户属于家庭(在本例中为id 2),则允许他查看其他用户。如果用户存在于user_home_rel_table中,则该用户属于该主页:
user_home_rel_table
----------
id | user_id | home_id
----------------------
1 | $currentID | 2
答案 0 :(得分: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
答案 1 :(得分: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
答案 2 :(得分:1)
我将使用Tom H的版本(投影和OBJECT名称)来提供另一种方式
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)