这是一个有点挑战性但有趣的问题。考虑拥有这些表
推文
tweet_id | retweet_of_id | user_id
跟随
user_id | followed_user_id
因此,我们将每个“转推作为单独的推文”存储为指向原始推文的 id ( retweet_of_id
)。这是因为我想分别在每一项下发表评论。如果某事不是转推,那么retweet_of_id
将是0
。
如何有效地使用 MySQL 检索以下内容?
- 我自己的推文
- 所有原始推文(来自我关注的用户)
- 以及推文的第一次转推(由我关注的用户)(来自我不关注的用户)
并且结果应该是两者的组合(按顺序),就像 twitter 所做的那样。
请考虑可能有 1,000,000 条推文,我们只需要最近的推文(例如:10 条)。
这是一个示例(我是用户 1,我关注用户 2 和 3)
tweet_id | retweet_of_id | user_id
----------------------------------
1 0 4 <- EXCLUDE (I don't follow user 4)
2 0 2 <- INCLUDE (I follow user 2)
3 0 3 <- INCLUDE (I follow user 3)
4 1 2 <- INCLUDE (I follow user 2 & first RT)
5 1 3 <- EXCLUDE (I already have the first RT)
6 2 3 <- EXCLUDE (I already have the orignal)
7 0 1 <- INCLUDE (My own tweet)
所以最终的顺序应该是这些推文:(7, 4, 3, 2
从最近的开始)