Facebookのようなソーシャルネットワークは、写真、ステータス、ユーザーアクティビティなどのさまざまなコンテンツを、最初に投稿された順序でページにどのように表示しますか。私は多くの調査を行いましたが、PHPとMYSQLを使用してどのように行われたかについての良い例を見つけることができないようです。
私が意味することの視覚的な例を含めました。
つまり、さまざまなコンテンツが写真、ステータスの更新、新しい接続などの別々のテーブルにあるということだと思います。そして、最終的な壁で、これらすべてのテーブルから同じ時間の順序で1つの壁にデータをプルする必要があります。したがって、私が提案するのは、次のメインフィールドを使用して壁の新しいテーブルを作成することです。
Activity_identifier
、activity_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
。
お役に立てれば!
クエリを実行すると、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";
これにより、先週の提出物のみが提供されます。
タイムスタンプ列を使用して、コード内の各エントリの挿入時間を追跡します。データをクエリするときは、ORDER BY
タイムスタンプ列。
指定したコンテンツが作成されたときのタイムスタンプまたは作成日を含むフィールドをデータベースに保存するだけで、DBから選択するときに、前述のcreation_dateで並べ替えることができます:)
テーブルのタイムスタンプフィールドを使用して(少なくとも私が行うことです)、挿入(または更新)ごとにログに記録します。デフォルト値はCURRENT_TIMESTAMPです。これにより、単純なSQLステートメントを使用して挿入の日付(および時刻)で並べ替えることができます。
それを出版社と購読者と考えてください。各メッセージには、ジャンクションテーブル内の受信者のリストがあります。
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レコードは期限切れになり、ロールオフされます。ニュースフィードはこれまでのところしか遡りませんが、ユーザーのページにアクセスすると、そのユーザーのすべての投稿を見ることができます。