私は現在、ユーザーのすべての行動を記録しており、彼らの行動をフォローしている人々が見られるように表示したいと考えています.Facebookが友人のためにそれを行うように.
これらすべてのアクションを次の構造のテーブルに記録しています。
- ID - PK
- userid - アクションがログに記録されるユーザーの ID
- actiondate - アクションが発生した日時
- actiontypeid - アクションのタイプの ID (別のテーブルに保存されたアクションタイプ - つまり、他のユーザーのフォロー、人のプロフィールへの書き込み、新しいコンテンツの作成、既存のコンテンツへのコメントなど)
- objectid - 作成したばかりのオブジェクトの ID (つまり、コメント ID)
- onobjectid - アクションを実行したオブジェクトの ID (つまり、コメントしたコンテンツの ID)
問題は、ログに記録されるアクションのタイプがいくつかあることです ( actiontypeid )。
ユーザーに表示するデータを取得する最良の方法は何ですか?
最も簡単な方法は、ユーザーがフォローしているユーザーのデータセットを取得し、そこから他のテーブルから他のすべての情報を取得することです (つまり、フォローしているユーザーの名前、フォローを開始したばかりのユーザーの名前、ユーザー プロファイルの名前など)。彼らが書いたなど)。ただし、これにより、大量の小さなクエリが作成され、while ループでデータベースへのトリップが発生します。良い考えではありません。
結合を使用して 1 つの大規模なデータ セット内のすべてを取得することはできますが、たった 1 つのクエリでどこからデータを取得すればよいかを知るにはどうすればよいでしょうか? - actiontypeidに基づいて、データを取得するためにいくつかの異なるテーブルを調べる必要があるさまざまな種類のアクションがあります...
つまり、ユーザー X がユーザー Y をフォローしていることを取得するには、フォロワーテーブルからデータ (ユーザー Y のユーザー名) を取得する必要がありますが、ユーザー X がコンテンツ Y にコメントした場合、コンテンツテーブルを調べてコンテンツのタイトルを取得し、 URL。
どんなヒントでも大歓迎です、ありがとう!