【问题标题】:Should I store as friends as "strings" or "integers" in php and mysql?我应该在 php 和 mysql 中将朋友存储为“字符串”还是“整数”?
【发布时间】:2009-02-24 08:15:57
【问题描述】:

我进退两难,不知道哪个更好。 (我正在使用 php 和 mysql 顺便说一句)

假设我正在开发一个社交社区网站。用户可以根据需要添加任意数量的朋友。在我的数据库中,我有一个用户表,其中存储用户的详细信息,包括用户的朋友。我应该将用户的朋友存储在:

字符串 => john;bryan;sam;paul;...;

整数 => 1;21;50;1779;30;...;

字符串表示存储他们的用户名。整数表示存储他们的用户 ID。

哪个更好?

如果是字符串,那将是一个非常非常大的字符串(假设用户有 400 个朋友,并且有些用户名非常长)

如果是id,如何在用户资料页列出好友?获取一个长字符串中的 ID 列表(以分号分隔),使用explode 函数将其制成数组。然后用循环显示??不麻烦吗?还有其他方法吗?如果是,请显示一些示例代码..

或者通常,你们如何将“朋友”列表存储在用户表中?

【问题讨论】:

    标签: mysql many-to-many


    【解决方案1】:

    不要将它们存储为以分号分隔的任何内容。将它们作为用户 ID 存储在查找表中。假设用户是#2。你可能有:

    SourceUserID | FriendUserID
    2              1
    2              21
    2              50
    2              1779
    2              30
    1              // One of John's friends
    

    然后,要显示朋友列表,您可以查询此表并通过 SourceUserID = 2 对其进行限制,并加入用户表以获取名称。例如:

    SELECT Name FROM SITE_USERS
    INNER JOIN USER_FRIENDS ON SITE_USERS.ID = USER_FRIENDS.FriendUserID
    WHERE SourceUser = ?
    

    (或者无论您的参数化查询格式是什么;使用您正在显示其页面的用户的 ID 填充参数。)

    【讨论】:

    • 为什么?如果我使用 INNER JOIN 查询会更快(检索数据更快)吗?
    • 为什么是哪个位?不将内容存储为分号分隔的列表?那就是收集数据(数据库擅长将数据集合存储在表中 - 这就是它们的用途)并将它们无缘无故地变成字符串。将它们变成字符串后,您将无法处理它们。
    【解决方案2】:

    通常您会创建第三个表“users_friends”,其中包含两列 userId 和friendId,它们都构成主键。一个快速的谷歌想出了这个:http://www.tekstenuitleg.net/en/articles/database_design_tutorial/8,但你可能想查找其他关于“多对多关系”的文章。

    【讨论】:

    • 我是个菜鸟 .. 嗯.. 编程新手
    • 看看我贴的那个链接,或者谷歌“多对多关系”,你应该会找到很多信息。
    【解决方案3】:

    这需要所谓的多对多关系(即一个朋友可以属于多个用户,用户可以有很多朋友)所以您需要创建第三个表来存储链接,该表将有一个uniqueId,一个朋友ID 和用户 ID,

    要让用户成为朋友,你需要编写一个连接的 SQL 语句,即

    SELECT Friends.FriendName FROM UserFriends 
       INNER JOIN Friends ON Friends.FriendId = UserFriends.FriendId 
       WHERE UserID = @intUserId 
    

    (您要为其列出好友的用户的@intUserId)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-27
      • 2011-11-04
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多