2

Facebookのようなソーシャルネットワークは、写真、ステータス、ユーザーアクティビティなどのさまざまなコンテンツを、最初に投稿された順序でページにどのように表示しますか。私は多くの調査を行いましたが、PHPとMYSQLを使用してどのように行われたかについての良い例を見つけることができないようです。

私が意味することの視覚的な例を含めました。 視覚的な例

4

6 に答える 6

1

つまり、さまざまなコンテンツが写真、ステータスの更新、新しい接続などの別々のテーブルにあるということだと思います。そして、最終的な壁で、これらすべてのテーブルから同じ時間の順序で1つの壁にデータをプルする必要があります。したがって、私が提案するのは、次のメインフィールドを使用して壁の新しいテーブルを作成することです。

Activity_identifieractivity_idおよびtimestamp。これActivity_identifierは、写真の共有(1としましょう)、壁への投稿(2としましょう)などのアクティビティの事前定義されたIDであり、timestampそのアクティビティがユーザーによって記録された時刻でありactivity_id、対応するテーブル。

ユーザーが新しいアクティビティを作成するたびに、そのアクティビティに対応するテーブルにデータを入力し、壁のこのテーブルに対応するエントリも記録します。

これで、壁を作成するための最後のクエリで、壁のこの新しいテーブルを呼び出すORDER BY TIMESTAMP DESC必要があります。次に、結果のデータをActivity_identifier外部キーactivity_idを介して他のアクティビティテーブル(ここでインテリジェントに使用)と結合して、正確な時系列で壁を再作成する必要があります。ユーザーがそれらを作成した順序。

ウォールへの増分呼び出しの場合、最後のクエリのタイムスタンプ(たとえばxtime)を維持し、すべての呼び出しで実行しますtimestamp > xtime ... ORDER BY TIMESTAMP DESC

お役に立てれば!

于 2012-05-30T18:15:19.013 に答える
0

クエリを実行すると、ORDERBY句があります。例えば:

SELECT `photos`
FROM `submissions`
ORDER BY `dateline` DESC

dateline整数UNIX時間として保存し、簡単な計算で使用して追加のパラメーターを設定できます。例えば:

$sql = "SELECT `photos`
FROM `submissions`
WHERE `dateline` >= " . (date() - 60*60*24*7) . "
ORDER BY `dateline` DESC";

これにより、先週の提出物のみが提供されます。

于 2012-05-30T17:46:03.270 に答える
0

タイムスタンプ列を使用して、コード内の各エントリの挿入時間を追跡します。データをクエリするときは、ORDER BYタイムスタンプ列。

于 2012-05-30T17:46:23.053 に答える
0

指定したコンテンツが作成されたときのタイムスタンプまたは作成日を含むフィールドをデータベースに保存するだけで、DBから選択するときに、前述のcreation_dateで並べ替えることができます:)

于 2012-05-30T17:48:05.183 に答える
0

テーブルのタイムスタンプフィールドを使用して(少なくとも私が行うことです)、挿入(または更新)ごとにログに記録します。デフォルト値はCURRENT_TIMESTAMPです。これにより、単純なSQLステートメントを使用して挿入の日付(および時刻)で並べ替えることができます。

于 2012-05-30T17:50:56.477 に答える
0

それを出版社と購読者と考えてください。各メッセージには、ジャンクションテーブル内の受信者のリストがあります。

Message
------------
message_id
message_body

Message_receivers
------------
message_id
user_id

Message_photos
------------
message_id
photo

メッセージを受け取る方法は次のとおりです(user_id 1):

SELECT m.*, mp.*
  FROM Message m
  JOIN Message_receivers mr
    ON mr.message_id = m.message_id AND mr.user_id = 1
  LEFT JOIN Message_photos mp
    ON mp.message_id = m.message_id
  ORDER BY m.message_id DESC

これらのリストは、ユーザーがニュースフィードを読んだときにリストを作成するのではなく、ユーザーが投稿したときに更新します。これは、投稿が多い場合でも、より多くの読み取りが行われるためです。

Message_receiversレコードは期限切れになり、ロールオフされます。ニュースフィードはこれまでのところしか遡りませんが、ユーザーのページにアクセスすると、そのユーザーのすべての投稿を見ることができます。

于 2012-05-30T19:15:31.103 に答える