我有三个表(用户,朋友,帖子)和两个用户( user1 和用户2 )。
当 user1 将 user2 添加为朋友时, user1 可以像在Facebook上一样查看 user2 的帖子。但只有 user1 将 user2 添加为朋友的日期之后的帖子。我的查询是这样的:
SELECT * FROM posts p JOIN friends f ON p.userid = f.friendid
AND s.time >= f.friend_since WHERE f.myid='user1id'
然后它在我添加为好友之后的日期之后给了我关于 user2 的所有帖子。 但问题是它隐藏了 user1 的帖子,并在添加日期后仅显示 user2 的帖子。
user1 应该会看到 user2 的所有帖子和 user2 的所有帖子, user2 在添加日期之后发布了朋友。
我该如何解决?
答案 0 :(得分:1)
您可以使用UNION
加入来自其他查询的结果,如下所示:
SELECT *
FROM posts p
JOIN friends f ON p.userid = f.friendid AND s.time >= f.friend_since
WHERE f.myid='user1id'
UNION SELECT *
From posts p
WHERE p.userid='user1id'
答案 1 :(得分:0)
获取user1
的所有好友ID,然后选择所有帖子.. WHERE ( p.userid IN ( FRIENDS_IDS ) AND s.time >= f.friend_since ) OR p.userid = USER_ID
这种方式比一个查询中的联合和联接要快得多。