2012-07-31 218 views
1

在客户CMS中,客户可以更新他们的个人信息,例如更改他们的地址和名字/姓氏。我使用mysql的UPDATE查询。Mysql更新但保留旧数据?

问题,像这样的工作是,是,人们可以改变他们的信息。例如。将他们的名字从john doe更改为asdfdas。我想保存他们的旧信息。

我有什么选择?做这个的最好方式是什么?

+1

您必须在同一个表中保留多个记录,以某种方式告诉当前“活动”记录是什么,或者您可以复制旧的记录表数据到。 – 2012-07-31 16:30:04

回答

0

创建更新column数据的新列将prior_to_update_column

上更新,将旧信息到prior_to_update_column

如果用户再次更新,追加到由,分隔的prior_to_update_column(看起来像数组)。

这应该保留以前所有的信息的用户更新

+0

我喜欢这个,因为我不需要创建新表格。我怎样才能将旧数据移动到新列?我正在使用'foreach($ _ POST作为$ key => $ value){'循环,如果已经设置了'$ _POST',我不认为我可以访问旧的信息。 – Linkjuice57 2012-07-31 16:44:36

+1

保存$ variable = $ _POST ['form_value']; - >然后在用新数据更新之前,使用当前信息更新prior_to_update_column(在数组末尾附加一个逗号) - >然后用表单中的信息更新。这可以在存储过程中完成以保存mysql行程(提高效率)。希望这可以帮助 :) – mlishn 2012-07-31 16:50:25

1

假设用户有一个唯一的ID,你可以有一个old_user_information表,当你做一个更新也做了新的进入该表。该表将具有自动生成的ID以及唯一的用户ID和其他用户过去的信息。

一个用户可以在这个表中的多个行,但仅有一行在现实Users表。

编辑:如果我是你,我会写一个存储过程,做这些事情都使得它更易于管理,如果事情的变化。

1

您可以包含像这样

`yourTableID, field, value, date` 

表和一个触发更新此。你写一个update触发器,如果​​它改变,就会添加旧值。请查看at the manual here以了解更多关于触发器的信息。

如果你不想使用触发器,你显然可以在你的逻辑中做同样的事情:只需用旧值更新历史表。但这需要一些技巧来找出如果你需要更新它,但没有什么复杂的。

为了便于检索发生了什么事情,您可能需要添加诸如“oldvalue”和“newvalue”之类的东西,但后者并不是真的需要,因为它可能在下一次更新中为“旧”值,或者它是当前值。

0

添加其他字段名称版本 和使用,而不是更新

-1

あの答えのとうりに,やってない。 UPDATE table name组插入物column = column +'新值'其中condition

相关问题