如何设置与用户列表具有以下关系的组表:
例如,假设我有用户表:
user_list
-----------------------------------
first_name | Last Name | user_id |
-----------------------------------
john | Appleseed | 4 |
Jasmin | Applejuice | 6 |
现在我想创建一个组表。如何创建一个表,其中用户可以包含在一个或多个组中。例如,John 包含在 Apple_group
中,但也包含在 Orage_group
中。 Jasmin 仅包含在 Orange_group
中:
groups
----------------------------------------------------
group_name | included_users_ids | group_id |
----------------------------------------------------
Apple_group | 4 | 1 |
Orange_group | 4, 6 | 6 |
假设 user_list 表已经存在,我将如何设置 groups 表?此外,我已经读到(请参阅下面的链接),我不应该在单个列中包含多个值。
Inserting a foreign key with multiple values
所以,我的问题是:
设置组表的适当方法是什么?
这样做的 SQL 是什么?
当想要将用户设置为组时,如何使用 PHP 处理此问题?
最佳答案
您需要创建第三个表,称为“连接表”。
users (
id,
name
);
groups (
id,
first_name,
last_name
);
groups_to_users (
user_id,
group_id
);
然后在 groups_to_users 表中为用户所属的每个组创建一个条目(或者,您可以用另一种方式说,为组中的每个用户创建一个条目)。这是一种 n:n 关系(多对多)。如果您搜索“数据库规范化”,正如我在回答上一个问题时向您提到的那样,您将了解有关这些内容的所有内容。
如果您想获取所有用户组,您可以执行以下操作:
SELECT g.* FROM groups_to_users gtu
LEFT JOIN groups g ON gtu.group_id=g.id
WHERE gtu.user_id = :UserId
如果您想获取群组的用户,您可以这样做:
SELECT u.* FROM groups_to_users gtu
LEFT JOIN users u ON gtu.user_id=u.id
WHERE gtu.group_id = :GroupId
关于php - SQL:具有多个子值的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23509334/