使用另一个表中的concat更新MYSQL中的值

时间:2015-02-06 10:20:28

标签: php mysql

我一直在尝试用逗号分隔符更新另一个表的字段中的字段值。

这是我目前的代码:

update programs set registered = (select user_id from users where reg_prog != 0)

我收到#1242 mysql错误。

我想有一个这样的列表:注册用户:47,97,10,618,5(这些是注册到该程序的用户的ID)。

任何帮助?

1 个答案:

答案 0 :(得分:2)

不要这样做。使用规范化数据模型。在数据库字段中使用任何类型的逗号分隔列表通常是一个非常糟糕的主意。你无法正确使用这些值,因为你总是需要凌乱的字符串操作来做任何事情。

如果您需要记录注册到某个程序的用户,请为这两个用户创建单独的用户,程序和关系表表:

 _________          ______________          _________
| program |        | user2program |        | program |
+---------+        +------------  +        +---------+
| id      |  <-->  | user_id      |        | name    |
| name    |        | program_id   |  <-->  | id      |
 ---------          --------------          ---------

为了保持这些表格正确填充需要更多的编程工作,但你会发现它的工作方式更好。

没有一个SQL语句可以在您的问题中执行您要查找的内容。如果您有合适的数据模型,则需要先首先插入您的程序,然后再插入您的用户,然后在两者之间添加相关内容

INSERT INTO program (id, name) VALUES (1, "My Program");
INSERT INTO user (id, name) VALUES (1, "John Doe");
INSERT INTO user2program (user_id, program_id) VALUES (1, 1);

要获得为程序注册的所有用户,您可以使用带有JOIN的SELECT语句:

SELECT p.name AS program_name, u.name AS user_name
FROM   program AS p
JOIN   user2program AS u2p ON p.id = u2p.program_id
JOIN   user AS u ON u.id = u2p.user_id
WHERE  p.id = 1 -- ID of the program