我正在建立一个用户可以将人员添加到他们的“列表”的网站。这个列表属于用户,但我想知道在一个函数中存储/检索/循环这个列表的最佳方式,以显示列表中的人,他们在那里以及谁创建它。
因此,一旦创建了用户名列表,我会假设将其存储在mysql表字段中,然后编写一个函数来搜索该表以查找影响当前登录用户的任何列表。
我的问题有两个问题。首先,假设列表只是a-z 0-9和连字符和下划线(用户名中没有空格,但用空格分隔),那么在mysql中存储的最佳字段类型是什么。其次,在许多列表中搜索用户名的最佳/最快方法是什么?
答案 0 :(得分:1)
您最好的选择是将每个名称存储在自己的行中。
答案 1 :(得分:1)
如果你的列表包含对其他成员的引用(每个人都有自己的列表),你最好的办法就是在某种MySQL表格中创建数据(因为MySQL针对这种事情进行了优化),例如你会需要2个简单的表,表一(用户表)将有2列。 ID(INT或BIGINT),UserName(VARCHAR)。
然后您的第二个表(用户链接)将有2个条目,具体取决于链接是双向完成还是单向查看。
双向:该表有2列,User1(INT或BIGINT),User2(INT或BIGINT)。要检索列表,只需在此表中查询用户ID在User1或User2中的所有条目。
单向:该表有2列,所有者(INT或BIGINT),Person(INT或BIGINT)。要为用户检索列表,只需查询此用户拥有的所有条目。
两者之间的区别在于,如果我将您添加到我的列表中,我将自动列在您的列表中。单向删除后,您必须将我添加到列表中才能显示在列表中,即使您在我的列表中也是如此。
答案 2 :(得分:1)
Varchar,索引和另外的缓存。
您正在使用用户名和用户ID字段创建一个usertable。然后创建一个表user_relation,您可以在其中组合用户ID,以便匹配。在所有外键关系上放置索引。这应该会提供相当不错的性能提升:)
修改一些其他信息以进行设置
表:用户 UserID - Int(8) - 主键,自动增量 名称 - Varcahr(30) EmailAddress - Varchar(90) - 唯一
表:UserRelation ID - Int(8) - 主键,自动增量 UserID_Source - Int(8),索引(这是用户) UserID_Friend - Int(8),Index(这是来自用户的朋友/关系)
通过这种方式,您可以轻松地将关系存储到特定用户。
要获得一些结果,请使用以下查询:
SELECT `User`.*, `User`.`UserID` AS `UserID_Source`
FROM `User`
WHERE `User`.`UserID` = `user_relation`.`user_id_source`
您可以通过JOIN扩展查询以直接获取关系匹配或使用其他查询;)