MySQL : Automatic column update with list of value

标签 mysql sql indexing foreign-keys

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

这是我的例子:

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/

相关文章:

mysql - 如何在值列表上使用索引?

mysql - 将索引应用于 Blob/长文本字段

java - 索引越界异常错误

mysql - 如果表中有空值,如何将MySQL列合并为一列?

mysql - 当查询结果返回不匹配时需要显示替代文本

MySQL 查询 - 获取未插入的 ID 以将新行插入表中

mysql - 获取一行,然后其他人按id排序

php - 将数据存储在静态属性中(php)

php - 为什么同一个结果会循环多次?

php - sql : Update sql query on the basis of posted values