当朋友在 PHP/MySQL 应用程序中忽略某人时,我应该如何处理?

Posted

技术标签:

【中文标题】当朋友在 PHP/MySQL 应用程序中忽略某人时,我应该如何处理?【英文标题】:How should I handle when a friend ignores someone in a PHP/MySQL app? 【发布时间】:2010-07-16 20:24:07 【问题描述】:

我有一张像friends(friendship_id, fid1, fid2, ENUM('pending', 'accepted', 'ignored') 这样的桌子。当用户忽略某人的好友请求时,我想确保他们不会收到“你被忽略了!”的消息,但我也希望记录该数据。关于如何解决这个问题的任何建议?

【问题讨论】:

.. 所以将该字段设置为忽略,但不向用户显示.. friends(...ENUM(...) 解析错误 【参考方案1】:

显然,您应该做的第一件事是不要实现任何会显示You've been ignored! 消息的代码。这解决了您的大部分问题。

但你必须小心一点。还有一个更微妙的问题 - 从发送者的角度来看,您的系统应该以各种方式表现得好像用户没有单击忽略一样。这意味着,如果发件人发出第二个请求并且通常您的系统显示“您已经向该用户发送了一个请求”,那么即使在收件人忽略了第一个请求之后,它也应该继续显示此消息。您需要注意不要通过更改消息来响应本应是私有的事件而泄露信息。


对 cme​​ts 的回应:

您是否认为最好一开始就不要发送“您已经向该用户发送了请求”消息?

我认为这有点超出了这个问题的范围,并且本身就是一个漫长的讨论,所以我只会在这里触及它。答案取决于您的应用程序是如何实现的。简短的回答是:您的应用程序应该帮助您的用户并且直观,所以如果消息对他们有帮助,则添加它。

另一种方法是,如果没有回复,请求会在一周后自动过期。当前请求过期后,您可以允许用户提出新请求。您可能需要考虑忽略一个请求是否意味着忽略该用户的一个请求或所有请求。

我还没有真正考虑过在我当前的架构下你将如何区分谁在忽略谁。

友谊请求是定向关系。你有一个发送者和一个接收者。另一方面,友谊通常(但不总是)被认为是无向的关系。友谊请求通常会有一条与之相关的消息“嘿,还记得我吗?我们昨晚在酒吧见过!”。另一方面,已建立的友谊通常没有与之相关的信息。因此,将这些不同类型的关系存储在数据库的不同表中可能是有意义的。

【讨论】:

马克,这基本上就是我所理解的那种微妙之处,尽管显然无法沟通。您是否认为最好一开始就不要发送“您已经向该用户发送了请求”消息?还是您认为该消息在被忽略后应该继续显示到永恒?如果您对此有任何想法,请更新您的答案。 我实际上也希望您考虑一下 Carson Myers 所说的话。在我当前的架构下,我还没有真正考虑过如何区分谁在忽略谁。【参考方案2】:

你如何区分谁忽略了谁?如果一个朋友忽略了另一个,那么我想ENUM 将被更改为“忽略”,并且被忽略的朋友也将成为忽略的朋友。您可以分辨出谁忽略了您,因为您似乎也忽略了他们。

最好放置一个中间表,例如ignore(ignorer, ignoree),其中的列只是朋友 ID。这样,无论何时向一位朋友发送消息、更新……等等,该应用都会首先检查目标朋友是否忽略了源朋友。

【讨论】:

【参考方案3】:

我最近在我正在编写的应用程序中实现了这一点。我实际上在数据库中有两行。我的列是 sourceUserId 和 destUserId。当某人(A 人)向另一个人(B 人)发送请求时,它会自动插入一行,其中 A 的 UserId 作为 sourceUserId,B 的 UserId 作为 destUserId。如果他们再次发送它,它会注意到该行已经存在。要让 B 批准 A,请将 B 的 UserId 作为 sourceUserId,将 A 的 UserId 作为 destUserId。

我的应用程序也有一个通知表,所以每次有人添加其他人(即成功插入 A 的 UserId=sourceUserId 和 B 的 UserId=destUserId 的行)时,都会向目标发送通知。

要检查两个人是否是朋友,只需检查倒数行是否存在。

【讨论】:

【参考方案4】:

示例: 用户 A 向用户 B 发送了好友请求,用户 B 忽略了此请求: 用户 A 不知道他/她的请求已被忽略。对于用户 A,此请求状态应视为“待处理”。

对于相同的 2 位用户: 尽管用户 B 忽略了用户 A 的请求,但这并不一定意味着用户 B 不能尝试与用户 A 成为朋友。这样的操作应该清除之前对用户 A 的请求的“忽略”(就好像它从未发生过一样)。

所以你的表架构没问题。您只需要考虑所有可能场景的语言和逻辑。

【讨论】:

以上是关于当朋友在 PHP/MySQL 应用程序中忽略某人时,我应该如何处理?的主要内容,如果未能解决你的问题,请参考以下文章

成功禁止某人时,Discord Bot 意外退出并出现错误

搜索 HTML 存储内容 PHP/MySQL 时忽略 HTML 字符?

当权限是任何人时,声纳分析需要身份验证

为啥我把php+mysql+apache都安装好了,可是当我在打开默认目录的时候显示的是文件下载

iOS 人脸识别持续学习

想要个空间建个小型的门户网站,空间要支持PHP+MYSQL数据库的。