1

私は現在、ユーザーのすべての行動を記録しており、彼らの行動をフォローしている人々が見られるように表示したいと考えています.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。

どんなヒントでも大歓迎です、ありがとう!

4

1 に答える 1

1

異なる actiontypeid に対して複数のビューを作成することを検討してください。それらを結合して、1 つの完全な履歴を作成します。

于 2010-11-08T11:21:12.390 に答える