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