gpt4 book ai didi

mysql - 为社交网站设计好友表

转载 作者:行者123 更新时间:2023-12-01 00:19:24 24 4
gpt4 key购买 nike

您好,我遇到了有关用于存储用户所有好友列表的表结构的问题。在下表中,如果用户 84 请求与用户 70 & 74 建立友谊,则用户 84> friend 是 70 和 74,反之亦然。同样,用户 7784

enter image description here

但问题是,如果我想找出用户 84 的所有 friend 及其详细信息,即用户 (70,74,77)。

我是否应该像图 2 输入重复记录 例如:如果用户 84 向用户 70 发送好友请求,当用户 70 接受请求时将插入另一行,例如 user_id 70 & friend_id 84

或者是否有任何 mysql 查询根据 friends 表的列值与 users 表连接。就像如果 user_id 是 84 它将根据 friend_id 加入,如果 friend_id 是 84 那么它将通过使用 加入用户表>user_id 列。

enter image description here

最佳答案

我假设在您的系统中友谊是对称的,即如果 A 是 B 的 friend ,则意味着 B 也是 A 的 friend 。在这种情况下,我建议您更改 Friend 表的列以反射(reflect)两者的事实人们在关系中具有平等的地位,例如

friend

  • @User1_Id
  • @User2_Id

有了这个,你可以做这样的查询

SELECT * FROM User WHERE User.UserId IN (
(SELECT User1_Id FROM Friend WHERE User2_Id = MY_USER_ID)
UNION
(SELECT User2_Id FROM Friend WHERE User1_Id = MY_USER_ID)
)

这使用子选择而不是连接,加上联合来获取 friend 用户 ID 的单个列表,具体取决于用户在 Friend 表中列出的方式。 sub-query 的文档和 union .

可能值得保持这样,而不是通过在 Friends 表中为每个关系((A,B)和(B,A))保留 2 行来简化代码。如果您有 N 个用户,则 Friends 表将有最多 N*(N-1) 行,如果您复制,如果您不复制则减半。

关于mysql - 为社交网站设计好友表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36998526/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com