更新发生时突出显示更改的方法

时间:2013-06-17 08:11:12

标签: php mysql database-schema

考虑下表行:

ID  | First Name | Last Name | Email           | Age
____________________________________________________
1   | John       | Smith     | john@smith.com  | 23
2   | Mohammad   | Naji      | me@naji.com     | 26

当发生update时,例如。帐户的电子邮件已更改,我该如何检测到该更改?

我应该对网站管理员的更改加粗。

当前数据库架构不支持它,因为我没有存储该行的先前版本。

请告诉我现在最便宜的解决方案。

2 个答案:

答案 0 :(得分:1)

您可以在php中创建一个函数并使用它来更新数据:

function update_row($new_row, $id)

参数:

  1. $ new_row是一个关联数组:array(“column name”=> new column value)
  2. $ id - 要更新的行的ID
  3. 功能如下:

    1. 在$ old_row

    2. 中选择id = $ id的当前行
    3. 比较旧行和新行并更新列:

      $ columns_updated = array();

      foreach($ new_row as $ key => $ value){

         if($new_row[$key] != $value)
         {
             array_push($key);
         }
      

      }

    4. 将id = $ id的行更新为$ new_row

    5. 返回$ columns_updated

答案 1 :(得分:1)

除非您对架构进行某种更改,否则您将无法跟踪更改。至少你需要一张能够为你做这件事的桌子。

你也可以 a)通过修改生成更新的代码,在更新时显式跟踪更改。这些可能在很多地方,所以这可能是耗时的。 b)通过在数据库上实现mySQL trigger来跟踪更改,每次更新行时,都会自动将旧版本复制到新表中。

在任何一种情况下,您都需要查询当前表和更改表,以检查您需要突出显示的更改。

您还需要确定何时不再需要突出显示更改。只需删除更改表中的旧行即可删除更改,但您需要决定何时应该执行更改。您可以使用MySQL event定期剔除更改,也可以将此维护与系统中的其他触发器或操作联系起来。

实施细节需要根据您的系统和期望来决定。

使用触发器和事件的优点是更改可以限制在数据库中,除非需要突出显示更改。