从朋友和所有者的帖子中选择INNER JOIN

时间:2012-09-12 02:42:50

标签: php mysql sql

我有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";

我希望的最终结果包含从最新到最旧的帖子,其中的朋友帖子与会员的帖子以可靠的方式混合。

1 个答案:

答案 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;