用于存储和检索通知数据的阵列设计

时间:2012-04-14 20:57:37

标签: php multidimensional-array

我想存储和检索社区网站的用户通知数据。当有人对用户的帖子发表评论或有人跟随用户时,应生成通知。我希望此行为能够复制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.

所以,如果你看看我打算实现的结果,以及我将从目前的阵列设计中得到的结果,两者都不同。我可以通过执行N次操作来实现所需的结果,这些操作可能涉及展平,递归for循环,排序等等到$ notifications数组。但是,我认为我可以通过重新设计数据在数组中的存储方式来减少开销,这样当需要检索数据时,我可以执行最少量的操作。此外,由于在显示数据时需要考虑读取状态,因此实现我想要的结果会变得更加复杂。我请求有关设计数组结构的建议以及如何从数组中检索数据以实现我想要的结果的示例。

1 个答案:

答案 0 :(得分:1)

你可以做下面的事情:

  • 选择“跟随”类型的通知,其中read_status ='not_read',LIMIT 2
  • 计算“跟随”
  • 类型的通知
  • 选择'comment'类型的通知,其中read_status ='not_read',LIMIT 2
  • 计算“评论”类型的通知

每当有人阅读通知时,您都会将其设置为“已读”。

每当有人评论或关注某事时,您都会为所有相关人员创建通知。这些人例如是参与讨论的所有人,或者仅仅是被回复的人。同样的评论。

这样,您就可以格式化并显示此消息,而无需操作太多数据。 (您可以将这些请求打包以提高效率,但您明白了这一点)

  

用户A,用户B和其他3人开始关注您。
用户A,用户Z和2   其他人评论了你的帖子Super Duper。

我会说,为这样的问题更改数据结构是过度的。通过这种方法,您将不断重新定义数据模型,这将很快成为一场噩梦。数据模型应该反映应用程序的大约束,而不是像这样的“小”格式化问题。