有没有办法用一个查询来做到这一点?

时间:2016-02-24 19:07:49

标签: mysql sql join

我有这些表格:

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

3 个答案:

答案 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)