0

我有三个表,分别是成员、朋友和更新。我正在尝试开发一个查询,该查询将为与特定用户成为朋友的用户获取更新。例如获取成员 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

朋友们

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

谢谢参观。

4

2 回答 2

1

您正在使用 user.id 加入 member_update,因此在第一次加入时忽略了朋友的更新。我将首先选择所有朋友,然后将 member_update 表与朋友表而不是用户表加入

询问:

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 是具有firendsfriend_id UPDATES 的用户ID。member_id 是该更新所属的用户ID

于 2013-02-06T06:45:23.567 回答
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
于 2013-02-06T06:44:45.000 回答