【问题标题】:How to store a list of users, and let the users know they are on that list如何存储用户列表,并让用户知道他们在该列表中
【发布时间】:2009-11-30 10:39:16
【问题描述】:

我正在建立一个网站,用户可以在其中将人员添加到他们的“列表”中。此列表属于用户,但我想知道在函数中存储/检索/循环遍历此列表的最佳方式是什么,以显示列表中的人、他们在那里以及创建者。

因此,一旦创建了用户名列表,我会假设将其存储在 mysql 表字段中,然后编写一个函数来搜索该表以查找影响当前登录用户的任何列表。

我的问题有两个。首先,假设列表只是 a-z 0-9 以及连字符和下划线(用户名中没有空格,但用空格分隔),将其存储在 mysql 中的最佳字段类型是什么。其次,在多个列表中搜索用户名的最佳/最快方法是什么?

【问题讨论】:

    标签: php mysql theory


    【解决方案1】:

    Varchar、索引和额外的缓存。

    您正在创建一个包含用户名和用户 ID 字段的用户表。然后创建一个表 user_relation,在其中组合用户 ID,以便获得匹配项。在所有外键关系上放置索引。这应该会带来相当不错的性能提升:)

    编辑一些额外的设置信息

    表:用户 UserID - Int (8) - 主键,自动递增 姓名 - 瓦尔卡尔 (30) 电子邮件地址 - Varchar (90) - 唯一

    表:用户关系 ID - Int (8) - 主键,自动递增 UserID_Source - Int (8),索引(这是用户) UserID_Friend - Int (8),索引(这是来自用户的朋友/关系)

    这样您可以轻松地存储与特定用户的关系。

    要获得一些结果,请使用如下查询:

    SELECT `User`.*, `User`.`UserID` AS `UserID_Source`
    FROM   `User`
    WHERE  `User`.`UserID` = `user_relation`.`user_id_source`
    

    您可以通过 JOIN 扩展查询以直接获取关系匹配项或使用另一个查询;)

    【讨论】:

      【解决方案2】:

      您最好的选择是将每个名称存储在自己的行中。

      【讨论】:

        【解决方案3】:

        如果您的列表包含对其他成员的引用(每个人都有自己的列表),您最好的选择是在某种 MySQL 表中创建数据(因为 MySQL 已针对此类事情进行了优化),例如,您可以需要 2 个简单的表,表一(用户表)将有 2 列。 ID(INT 或 BIGINT)、用户名(VARCHAR)。

        然后您的第二个表(用户链接)将有 2 个条目,具体取决于链接是双向还是单向,请参见下文。

        双向:该表将有 2 列,User1(INT 或 BIGINT),User2(INT 或 BIGINT)。要检索列表,只需在此表中查询用户 ID 位于 User1 或 User2 中的所有条目。

        单向:该表将有 2 列,所有者(INT 或 BIGINT),人员(INT 或 BIGINT)。要检索用户的列表,只需查询该用户拥有的所有条目即可。

        两者之间的区别在于,如果我将您添加到我的列表中,我会自动添加到您的列表中。单向删除后,您必须将我添加到您的列表中,我才能出现在您的列表中,即使您在我的列表中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-10
          • 1970-01-01
          • 2019-06-27
          • 2020-05-22
          • 1970-01-01
          • 2012-02-06
          相关资源
          最近更新 更多