如何设置与用户列表具有以下关系的组表:
例如,假设我有用户表:
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处理?
答案 0 :(得分:1)
您需要创建第三个表,称为“连接表”。
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