gpt4 book ai didi

php - SQL:具有多个子值的外键

转载 作者:行者123 更新时间:2023-11-29 12:59:47 26 4
gpt4 key购买 nike

如何设置与用户列表具有以下关系的组表:

例如,假设我有用户表:

              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

所以,我的问题是:

  1. 设置组表的适当方法是什么?

  2. 这样做的 SQL 是什么?

  3. 当想要将用户设置为组时,如何使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com