1

我有 3 个表: user_info ,friend_match,posts

用户信息:帐户ID | 用户名

朋友匹配:友谊ID | 朋友1(第一个帐户ID)| friend2 (account_id of 2nd) 好友匹配包含 2 1 和 1 2、1 3 和 3 1。

帖子:post_id | 海报ID | post_message | 发布日期

我如何从用户的朋友和他自己的朋友那里获得帖子?

我已经尝试过了,但它似乎效率低下,而且我遇到了分页问题,​​因为用户可能或多或少地发布了分页。

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 回答