0

考虑下表行:

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

当一个update发生时,例如。帐户的电子邮件已更改,我应该如何检测更改是什么?

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

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

请告诉我现在成本最低的解决方案。

4

2 回答 2

1

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

function update_row($new_row, $id)

参数:

  1. $new_row 是一个关联数组:array("column name" => new column value)
  2. $id - 要更新的行的 id

函数是这样工作的:

  1. 选择 id = $id 的当前行到 $old_row

  2. 比较新旧行并更新列:

    $columns_updated = 数组();

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

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

    }

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

  4. 返回 $columns_updated

于 2013-06-17T08:29:29.703 回答
1

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

您可以 a) 在更新时通过修改生成它们的代码来显式跟踪更改。这些可能在很多地方,所以这可能很耗时。b) 通过在数据库上实现一个mySQL 触发器来跟踪更改,该触发器在每次更新行时自动将旧版本复制到新表中。

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

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

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

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

于 2013-06-17T08:33:52.447 回答