gpt4 book ai didi

MySQL : Automatic column update with list of value

转载 作者:行者123 更新时间:2023-11-30 01:05:33 24 4
gpt4 key购买 nike

我只想自动更新与外键链接的两个表的列。更重要的是,这些列不仅必须包含一个值,还必须包含一系列值。

这是我的例子:

Table Name : members
Member name : Demo User
Assigned Tasks : <List of tasks assigned to "Demo User">

Table Name : tasks
Task Name : Modeling
Assigned To : <List of users assigned to "Modeling">

在每个表中,我希望能够在列中插入值,而另一个表会自动更新。

示例:

Table Name : members
Member name : Demo User
Assigned Tasks : Modeling,Mapping

Table Name : tasks
Task Name : Modeling
Assigned To : AUTOMATIC UPDATE ->Demo User

Task Name : Mapping
Assigned To : AUTOMATIC UPDATE ->Demo User

我尝试使用外键(使用innoDB),但我只是成功地在列中插入一个值,而另一个表没有自动更新......

感谢您的帮助!

最佳答案

永远不要在数据库中存储分隔值。通过创建一个多对多表(在您的情况下,我们将其称为 assigned_tasks)来标准化您的数据。从长远来看,它将使您能够正常维护和查询数据,从而获得巨大返回。

话虽如此,您的架构可能看起来像

CREATE TABLE members
(
member_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
member_name VARCHAR(32)
);
CREATE TABLE tasks
(
task_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
task_name VARCHAR(32)
);
CREATE TABLE assigned_tasks
(
member_id int,
task_id int,
PRIMARY KEY (member_id, task_id),
FOREIGN KEY (member_id) REFERENCES members (member_id),
FOREIGN KEY (task_id) REFERENCES tasks (task_id)
);

现在,如果您需要一个包含每个用户的分隔任务列表的表示,您可以使用 GROUP_CONCAT()GROUP BY

SELECT m.member_id, m.member_name, GROUP_CONCAT(t.task_name) tasks
FROM assigned_tasks a JOIN members m
ON a.member_id = m.member_id JOIN tasks t
ON a.task_id = t.task_id
GROUP BY m.member_id, m.member_name

输出:

| MEMBER_ID | MEMBER_NAME |            TASKS ||-----------|-------------|------------------||         1 |   Demo User | Modeling,Mapping |

这里是SQLFiddle 演示

关于MySQL : Automatic column update with list of value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19752881/

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