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

Php 存储和检索通知数据的阵列设计,php,multidimensional-array,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_t

我想存储和检索社区站点的用户通知数据。当有人对用户的帖子发表评论或有人跟踪用户时,应生成通知。我希望这种行为能够复制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.
如果我创建一个用于保存通知的通用数组,那么它将如下所示:

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个操作来实现所需的结果,这些操作可能涉及扁平化、循环递归、排序等。但是,我认为我可以通过重新设计数据在数组中的存储方式来减少开销,这样当需要检索数据时,我可以执行最少的操作。此外,由于在显示数据时需要考虑读取状态,因此要达到我想要的结果就更加复杂了。我请求提供有关设计阵列结构的建议,以及如何从阵列中检索数据以实现我想要的结果的示例。

您可以执行以下操作:

  • 选择类型为“following”的通知,其中read_status=“not_read”,限制为2
  • 计数“following”类型的通知
  • 选择类型为“comment”的通知,其中read\u status=“not\u read”,限制为2
  • 计数“comment”类型的通知
每当有人阅读通知时,您将其设置为“已读”

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

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

用户A、用户B和其他3个用户开始跟踪您
用户A、用户Z和用户2 其他人对你的帖子发表了评论


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

谢谢回复。是的,数据模型应该反映约束,而不是格式问题。但是,该应用程序目前正在开发中,不包含任何有意义的数据。所以,现在是我能够正确构建它的时候了。你的建议对以下几点有用。然而,随着注释的增加,又引入了一个变量$post_id。每个帖子都可以有不同的人评论导致嵌套。此外,我还需要在用户读取通知以及新用户评论或跟随时设置/取消设置读取状态。你能把这些考虑进去并提出相应的建议吗。谢谢。更新了我的答案。我的观点是要表明,使用当前的模型,您可能可以处理很多情况。保持你的数据模型简单。现在我明白你的意思了。起初,我以为您指的是我在问题中所问的数组。但我现在看到,您的建议处理的是数据库的直接SQL语句。我将为此编写一个工作代码,并在一两天内回复给您。同时,我将把这个问题标记为未回答。由于我将通知数组作为序列化数据存储在数据库中,因此遇到了死锁。SQL查询语句无法使用的内容。因此,我终于开始创建一个新表,并将数据存储在其中,然后按照您的建议检索它。Thx用于在正确方向上进行微调。