1

user_info 、 friend_match 、 posts の 3 つのテーブルがあります。

ユーザー情報:アカウント ID | ユーザー名

フレンドマッチ :フレンドシップID | friend1 (1stのaccount_id) | friend2 (2 番目のアカウント ID) フレンド マッチには 2 1 と 1 2、1 3 と 3 1 が含まれます。

投稿: post_id | poster_id | 投稿メッセージ| date_posted

ユーザーの友達や自分の友達から投稿を取得するにはどうすればよいですか?

私はこれを試しましたが、非効率的で、ページネーションに問題があります。これは、ユーザーが多かれ少なかれ投稿してページネーションが失われる可能性があるためです。

SELECT * FROM 
                    (
                    SELECT p.post_id, p.post_message, UNIX_TIMESTAMP(p.date_posted) as date_posted, u.username FROM posts p
                    INNER JOIN friend_match fm
                        ON p.poster_id = fm.friend1
                    INNER JOIN user_info u
                        ON u.account_id = p.poster_id
                    WHERE fm.friend2 = $sessionid

UNION ALL

                    SELECT p.post_id, p.post_message, UNIX_TIMESTAMP(p.date_posted) as date_posted, u.username FROM posts p
                    INNER JOIN user_info u
                        ON u.account_id = p.poster_id
                    WHERE p.poster_id = $sessionid
                    )z
                    ORDER BY post_id DESC LIMIT $page,$limit";

私が望んでいる私の最終結果には、確実にページング可能な方法でセッションホルダーの投稿と混ざり合った友人の投稿とともに、最新のものから古いものの順に投稿が含まれています。

4

1 に答える 1

1

完全な答えではありませんが、次のようにサブセレクトを使用する可能性があります。

SELECT * FROM posts p
  inner join user_info u ON u.account_id = p.poster_id
WHERE p.poster_id = $sessionid or p.poster_id IN 
(SELECT f.friend1 FROM friend_match f
 WHERE f.friend2 = $sessionid)
ORDER BY post_id DESC LIMIT $page, $limit;
于 2012-09-12T03:02:48.380 に答える