0

私は3つのテーブルを持っています

friends
posts
members

friends
========
id, to, from (user_id's), status

there are 3 status's -1 = denied, 0 = no response/new, 1 = accepted



posts
=======
p_id, user_id (same as member_id), text


members
========
member_id, f_name, l_name

「posts」の投稿からテキストを選択したい場合は、それを「members」のユーザー名と組み合わせて、user_id が「friends」テーブルにある投稿のみを表示します。

実行できるかどうかを知りたいのですが、クエリで IN () ステートメントを試してみましたが、IN () 内で csv を生成する際に新しい問題が発生します。私は mysql を介してこれを行うことをお勧めしますが、それができない場合は、グローバル変数を使用してフレンド データを保存することもできます (ただし、ユーザーが新しいフレンドを取得したときに最新ではないか、更新する必要があります)。 )。

4

4 に答える 4

1

私が理解しているように、友達テーブルにある友達ではなく、すべて友達の名前と投稿を見つけたいと思っています...?

あなた自身のユーザーIDが にある$myIdので、これでうまくいくはずです(最新の投稿が最初)。

編集:友達のステータスチェックを追加

SELECT m.f_name, m.l_name, p.`text`
FROM members m
JOIN posts p 
  ON m.member_id = p.user_id
JOIN friends f 
  ON f.`to` = m.member_id OR f.`from` = m.member_id
WHERE (f.`from` = $myId OR f.`to`= $myId)
  AND f.`status` = 1 AND m.member_id <> $myId
ORDER BY p.p_id DESC
于 2012-08-28T07:20:53.147 に答える
0

これを試して :

    SELECT p.text,m.f_name,m.l_name FROM posts p 
    LEFT OUTER JOIN members m ON p.user_id=m.member_id
    where p.user_id in(select id from friends);

OR

   SELECT p.text,m.f_name,m.l_name FROM posts p 
   LEFT OUTER JOIN members m ON p.user_id=m.member_id
   INNER JOIN friends f on p.user_id=f.id
于 2012-08-28T07:22:57.407 に答える
0

私の理解が正しければ、user_id があり、そのユーザーの「友達」によって作成されたすべての投稿が必要です。このクエリは投稿で始まり、それを友人に結合し (作成者は友情の「宛先」です) (この時点で WHERE 句は非友人の投稿を除外します)、次にメンバーに結合して作成者の名前情報。

SELECT 
  posts.p_id
  posts.text,
  CONCAT(members.f_name, " ", members.l_name)
FROM 
  posts
  JOIN friends ON posts.user_id = friends.to
  JOIN members ON posts.user_id = members.member_id
WHERE
  friends.from = ?
GROUP BY posts.p_id
于 2012-08-28T07:23:20.080 に答える
0

あなたがこれらのレコードを持っていると仮定したので、すべての友達を取得するためにサブクエリを追加しました

Friends
==================================
ID      TO       FROM     STATUS
==================================
1       1        2         1
2       3        1         1

あなたのmember_id = 1、あなたの友達は 2、3 ですよね?

SELECT  b.f_name,
        b.L_name,
        c.`text`
FROM
    (
        SELECT `to` friendID
        FROM    friends
        WHERE   `status` = 1 AND
                `from` = ?             -- change this to your ID
        UNION
        SELECT `from` friendID
        FROM    friends
        WHERE   `status` = 1 AND
                `to` = ?               -- change this to your ID
    ) a  INNER JOIN members b
            ON a.friendID = b.member_ID
        LEFT JOIN   posts c
            ON a.friendID = c.user_id
于 2012-08-28T07:31:44.743 に答える