你如何使用MySQL更新附加到行?

时间:2014-03-21 13:26:20

标签: php mysql

我正在建立一个基本的CMS系统,允许注册用户进行页面编辑。

我希望存储已向每个特定页面提交了一些页面内容的用户列表。在我的页面数据库表中,我有一个名为contributions的列,在那里我希望拥有每个用户的所有用户ID,每个用户为每个页面做出贡献,用一个公用分隔。看起来像这样...

Page Name | Author | Comments | Contributed
---------------------------------------------------------------
Home      | 1      | 0        |1, 2, 3, 4
About     | 1      | 0        |1, 3, 4, 7, 9
Contact   | 2      | 0        |2, 4
Download  | 8      | 0        |8

使用MySql,我如何编写一个更新查询,当用户做出贡献而不是更新整行时,将另一个用户ID附加到此列,删除之前贡献的人的ID?

2 个答案:

答案 0 :(得分:1)

为此,最好创建某种历史表。例如:

**page_history**

id
page_id //ID of the page
user_id //ID of the user making the change
date //Date and time of the change
from //The old content
to //The changed content

然后,每当用户编辑页面时,您都会在page_history中插入一个新行。注意:您应该阅读Database Normalization的概念。

答案 1 :(得分:0)

我最终可能会在一个级别上执行此操作 - 不了解您的CMS大小:

CREATE TABLE test(pageid INT, contributed VARCHAR(1024));
INSERT INTO test(pageid, contributed) VALUES (1, "kala");
UPDATE test SET contributed = CONCAT((SELECT contributed FROM (SELECT * FROM test) as a WHERE pageid = 1),',','new_user_name') WHERE pageid = 1;

对于SELECT * FROM test,有很好的描述 You can't specify target table for update in FROM clause