これは少し難しいですが、楽しい質問です。これらのテーブルを持つことを検討してください
つぶやき
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
(最新のものから開始)