让朋友更新查询

时间:2013-02-06 06:36:57

标签: mysql sql inner-join

我有三个表,包括成员,朋友和更新。我正在尝试开发一个查询,该查询将获取与特定用户成为朋友的用户的更新。例如,获取成员X的所有朋友的所有更新,USER:

X   -> friend_1 > updated picture
    -> friend_2 > added friend
    -> friend_3 > updated status

Y   -> friend_1 > updated picture
    -> friend_2 > added friend
    -> friend_3 > updated status

FRIENDS

friend_index
friend_id
logged_user_id  *

会员

display_name
 id             *

更新

update_id
member_id       *
friend_id
update_action

到目前为止,这是我目前的查询,它为我提供了当前用户的更新,而不是当前用户的朋友。

   SELECT
U.update_id,
U.update_action,
U.update_hidden,
U.update_time,
U.member_id,
U.friend_id AS friend,
M.id,
M.display_name AS user,
F.friend_id,
F.logged_user_id
FROM member_friends F
JOIN members M
    ON M.id = F.logged_user_id
JOIN member_updates U 
    ON U.member_id = F.friend_id 
WHERE U.member_id = :id
ORDER BY U.update_id DESC

谢谢你看看。

2 个答案:

答案 0 :(得分:1)

您正在使用user.id加入member_update,从而在第一次加入时遗漏了好友更新。 我首先选择所有的朋友,然后加入member_update表和friends表而不是用户表

查询:

SELECT
    U.member_id,
    U.update_action,
FROM members M
    JOIN member_friends F
        ON M.id = F.logged_user_id
    JOIN member_updates U
        ON U.member_id = F.friend_id
WHERE M.id = :id
    AND U.update_hidden <> 1
ORDER BY U.update_id DESC

假设logged_user_id是具有firends friend_id的用户ID UPDATES.member_id是该更新所属的用户ID

答案 1 :(得分:0)

试试这个:

SELECT
    U.update_id,
    U.update_action,
    U.update_time,
    U.member_id,
    U.id,
    F.friend_id,
    U.display_name AS user,
    F.display_name AS friend
FROM members M
    JOIN member_friends F
        ON M.id = F.logged_user_id
    JOIN member_updates U
        ON U.member_id = F.friend_id
WHERE M.id = :id
    AND U.update_hidden <> 1
ORDER BY U.update_id DESC