0

メンバー、友達、更新の 3 つのテーブルがあります。特定のユーザーと友達になっているユーザーの更新を取得するクエリを開発しようとしています。たとえば、メンバー 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

member_update に user.id で参加しているため、最初の参加で友達の更新を除外しています。まず、すべての友達を選択してから、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 が firends friend_id を持つユーザー ID であると仮定します UPDATES.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 に答える