我有3个表:user_info,friend_match,posts
user_info: account_id |的用户名
friend_match: friendship_id | friend1 (第1帐号)| friend2 (第2位的account_id) 朋友比赛包含2 1和1 2 1 3和3 1。
帖子: post_id | poster_id | post_message |的 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";
我希望的最终结果包含从最新到最旧的帖子,其中的朋友帖子与会员的帖子以可靠的方式混合。
答案 0 :(得分:1)
不是完整的答案,但可能会以某种方式使用sub-select:
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;