2

コミュニティサイトのユーザー通知データを保存および取得したい。通知は、誰かがユーザーの投稿にコメントしたとき、または誰かがユーザーをフォローしたときに生成される必要があります。この動作でFacebookの通知を複製したいと思います。したがって、次のようになります。

User A, User B and 3 other started following you.
User A, User Z and 2 others commented on your post Super Duper.

通知を保持するための汎用配列を作成すると、次のようになります。

$notification = array ($notification_id, notification_time, $read_status, $notification_recipient_id, $notification_initiator_id, $post_id=NULL, $comment_id=NULL); // This array represents a single notification

$notifications = array ($notification, ...); // This array is made up of many single notification array.

したがって、$ Notifications配列(すべての個別の通知配列を含む配列)からデータを取得する場合は、forループを使用して、時間に基づいて配列を並べ替えた後に結果をエコーし​​ます。これにより、結果として次のような結果が得られます。

User A started following you.
User B started following you.
User C started following you.
User D started following you.
User E started following you.
User A commented on your post Super Duper.
User B commented on your post Super Duper.
User C commented on your post Super Duper.
User D commented on your post Super Duper.

したがって、私が達成しようとしている結果と、現在のアレイ設計から得られる結果を見ると、どちらも異なります。$notifications配列に対してフラット化、ループの再帰、並べ替えなどを含むN回の操作を実行することで、目的の結果を達成できる場合があります。ただし、データを配列に格納する方法を再設計することでオーバーヘッドを削減できると思います。これにより、データを取得する必要があるときに、実行する操作の数を最小限に抑えることができます。また、データを表示する際には読み取りステータスを考慮する必要があるため、目的の結果を得るにはさらに複雑になります。アレイ構造の設計に関する提案と、意図した結果を達成するためにアレイからデータを取得する方法の例を要求します。

4

1 に答える 1

1

あなたは次のことをすることができます:

  • タイプ'following'の通知を選択します。ここで、read_status ='not_read'、LIMIT 2
  • タイプ「following」の通知をカウントします
  • タイプ'comment'の通知を選択します。ここで、read_status ='not_read'、LIMIT 2
  • タイプ「コメント」の通知をカウントします

誰かが通知を読むときはいつでも、あなたはそれを「読む」に設定します。

誰かが何かにコメントしたりフォローしたりするたびに、すべての関係者に通知を作成します。それらの人は、例えば、議論に関与するすべての人、または単に返信される人です。コメントも同じです。

このようにして、多くのデータを操作することなく、このメッセージをフォーマットして表示することができます。(おそらく、効率を上げるためにこれらの要求をパックすることができますが、アイデアは得られます)

ユーザーA、ユーザーB、その他3人があなたをフォローし始めました。
ユーザーA、ユーザーZ、その他2人があなたの投稿SuperDuperにコメントしました。

このような問題のためにデータ構造を変更するのはやり過ぎだと思います。このアプローチでは、データモデルを絶えず再定義することになり、すぐに悪夢になります。データモデルは、このような「小さな」フォーマットの問題ではなく、アプリケーションの大きな制約を反映する必要があります。

于 2012-04-14T21:03:26.470 に答える