我有 3 个表:user_info、friend_match、posts
用户信息:account_id | 用户名
friend_match : friendship_id | friend1(第一个的 account_id)| friend2(第二个的 account_id) 好友匹配包含 2 1 和 1 2、1 3 和 3 1。
帖子:post_id | poster_id | post_message | 发布日期
我如何从用户的 friend 和他自己的 friend 那里获得帖子?
我已经试过了,但它似乎效率低下,而且我在分页方面遇到了问题,因为用户可能发布了或多或少的帖子,这会导致分页失败。
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";
我希望的最终结果包含按从最新到最旧顺序排列的帖子,其中 friend 的帖子以可靠分页的方式与 session 持有者的帖子混合在一起。
最佳答案
不是完整答案,但可以使用 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;
关于php - 从 friend 和所有者的帖子中选择 INNER JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12380557/