我期待将朋友列表存储在数据库中的逻辑。我正在考虑使用用户 ID 在数组中添加东西
示例:朋友表中用户 a 的数组将包含朋友的用户 ID 数组,例如 1、2、4、6、77、44 等
我想知道这是否是一种有效的方法。如果不是,应该为大型社区理想地实施什么逻辑?
我期待将朋友列表存储在数据库中的逻辑。我正在考虑使用用户 ID 在数组中添加东西
示例:朋友表中用户 a 的数组将包含朋友的用户 ID 数组,例如 1、2、4、6、77、44 等
我想知道这是否是一种有效的方法。如果不是,应该为大型社区理想地实施什么逻辑?
您可能需要一个单独的多对多连接表。为了实现这一点,如果用户和他们的朋友都驻留在同一个用户表中。该表可能如下所示:
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]
不不不!
不要在一个数据库字段中存储多个值。它会给你带来很多问题。
例如,您可以使用这样的结构
friends (user_id, user_id)
这表示 2 个朋友。