我期待着在数据库中存储朋友列表的逻辑。我正在考虑使用userid在数组中添加内容
示例: friends表中用户a的数组将包含1、2、4、6、77、44等好友的userid数组
我想知道这是否是一种有效的方法。如果不是,那么对于大型社区来说,理想的实现逻辑是什么?
发布于 2012-11-12 17:52:22
您可能需要一个单独的多对多连接表。为了实现这一点,如果用户和他们的朋友都驻留在同一个用户表中。该表可能如下所示:
为其执行好友查找的用户的user_id - id,是用户表中user_id字段的外键与用户关联的朋友的friend_id - id,也是用户表中user_id字段的外键
您将拥有跨两个字段的复合主键,从而确保每个user_id到friend_id的组合都是唯一的。
这将是示例CREATE TABLE语句:
CREATE TABLE `friends` (
`user_id` INT(11) NOT NULL,
`friend_id` INT(11) NOT NULL,
PRIMARY KEY (`user_id`, `friend_id`)
)
ENGINE = INNODB;
示例数据可能如下所示:
INSERT INTO `friends` (`user_id`, `friend_id`)
VALUES
(1, 2), (1, 3), (1, 4), (2, 1), (2, 10), (4, 1), (4, 20);
然后假设您想查找与特定用户(即登录的用户)相关联的朋友的所有用户表数据。您可以像这样查询该数据:
SELECT users.*
FROM users
INNER JOIN friends ON users.user_id = friends.friend_id
WHERE friends.user_id = [The ID of current user]
发布于 2012-11-12 17:46:53
不,不,不!
不要在一个db字段中存储多个值。它会给你带来很多问题。
例如,您可以使用这样的结构
friends (user_id, user_id)
也就是说有两个朋友。
https://stackoverflow.com/questions/13348715
复制相似问题