mysql - 维护网站中群组的订阅列表
mysql - Maintaining Subscription List of a Group in a Website
我正在创建一个网站,用户可以在其中加入某些群组。现在我需要维护每个组中的用户集 and/or 每个用户已加入的组集。由于 MySql 不支持数组,我无法维护组中的用户数组(作为 "groups" table 中的字段)或用户中的组数组(作为 "users" table 中的字段)。那么我该如何实现呢?
我目前的解决方案是维护一个 table 组订阅,其中包含 userID 和 groupID 字段。所以当我需要这两个列表中的任何一个时,我都可以做到,
SELECT USERID FROM SUBSCRIPTIONS WHERE GROUPID=3
或
SELECT GROUPID FROM SUBSCRIPTIONS WHERE USERID=4
这将为我提供所需的列表。这是最 efficient/standard 的方法还是有更好的方法?
你写的不错。
一般情况下,相关数据库中记录之间的关系有3种:
- 一 - 一(例如
user
和 profile
通过 user.profile_id = profile.id
链接)
- 一个 - 许多(
user
和 messages
通过 message.user_id = user.id
链接)
- 很多 - 许多
你的案例是最后一个,它总是通过第 3 个 table 起作用。
对于你的情况,它可以是 users_subscriptions (user_id, subscription_id)
示例查询 select 所有订阅的用户:
SELECT u.name, GROUP_CONCAT(s.name) as `subscriptions`
FROM users u
JOIN users_subscriptions us ON us.user_id = u.id
JOIN subscriptions s ON us.subscription_id = s.id
GROUP BY u.id
如果我正确理解你的问题,那是标准的方式。
您已经创建了一个位于用户 table 和组 table 之间的 "pivot table",它存储了两者之间的关系。这就是多对多关系存储在关系数据库中的方式。正如您正确指出的那样,您可以通过这种方式检索一个组的所有成员或一个成员的所有组。
我正在创建一个网站,用户可以在其中加入某些群组。现在我需要维护每个组中的用户集 and/or 每个用户已加入的组集。由于 MySql 不支持数组,我无法维护组中的用户数组(作为 "groups" table 中的字段)或用户中的组数组(作为 "users" table 中的字段)。那么我该如何实现呢?
我目前的解决方案是维护一个 table 组订阅,其中包含 userID 和 groupID 字段。所以当我需要这两个列表中的任何一个时,我都可以做到,
SELECT USERID FROM SUBSCRIPTIONS WHERE GROUPID=3
或
SELECT GROUPID FROM SUBSCRIPTIONS WHERE USERID=4
这将为我提供所需的列表。这是最 efficient/standard 的方法还是有更好的方法?
你写的不错。
一般情况下,相关数据库中记录之间的关系有3种:
- 一 - 一(例如
user
和profile
通过user.profile_id = profile.id
链接) - 一个 - 许多(
user
和messages
通过message.user_id = user.id
链接) - 很多 - 许多
你的案例是最后一个,它总是通过第 3 个 table 起作用。
对于你的情况,它可以是 users_subscriptions (user_id, subscription_id)
示例查询 select 所有订阅的用户:
SELECT u.name, GROUP_CONCAT(s.name) as `subscriptions`
FROM users u
JOIN users_subscriptions us ON us.user_id = u.id
JOIN subscriptions s ON us.subscription_id = s.id
GROUP BY u.id
如果我正确理解你的问题,那是标准的方式。
您已经创建了一个位于用户 table 和组 table 之间的 "pivot table",它存储了两者之间的关系。这就是多对多关系存储在关系数据库中的方式。正如您正确指出的那样,您可以通过这种方式检索一个组的所有成员或一个成员的所有组。