0

我期待将朋友列表存储在数据库中的逻辑。我正在考虑使用用户 ID 在数组中添加东西

示例:朋友表中用户 a 的数组将包含朋友的用户 ID 数组,例如 1、2、4、6、77、44 等

我想知道这是否是一种有效的方法。如果不是,应该为大型社区理想地实施什么逻辑?

4

2 回答 2

2

您可能需要一个单独的多对多连接表。为了实现这一点,如果用户和他们的朋友都驻留在同一个用户表中。该表可能如下所示:

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-12T17:52:22.273 回答
1

不不不!

不要在一个数据库字段中存储多个值。它会给你带来很多问题。

例如,您可以使用这样的结构

friends (user_id, user_id)

这表示 2 个朋友。

于 2012-11-12T17:46:53.463 回答