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