考虑下表行:
ID | First Name | Last Name | Email | Age
____________________________________________________
1 | John | Smith | john@smith.com | 23
2 | Mohammad | Naji | me@naji.com | 26
当发生update
时,例如。帐户的电子邮件已更改,我该如何检测到该更改?
我应该对网站管理员的更改加粗。
当前数据库架构不支持它,因为我没有存储该行的先前版本。
请告诉我现在最便宜的解决方案。
答案 0 :(得分:1)
您可以在php中创建一个函数并使用它来更新数据:
function update_row($new_row, $id)
参数:
功能如下:
在$ old_row
比较旧行和新行并更新列:
$ columns_updated = array();
foreach($ new_row as $ key => $ value){
if($new_row[$key] != $value)
{
array_push($key);
}
}
将id = $ id的行更新为$ new_row
返回$ columns_updated
答案 1 :(得分:1)
除非您对架构进行某种更改,否则您将无法跟踪更改。至少你需要一张能够为你做这件事的桌子。
你也可以 a)通过修改生成更新的代码,在更新时显式跟踪更改。这些可能在很多地方,所以这可能是耗时的。 b)通过在数据库上实现mySQL trigger来跟踪更改,每次更新行时,都会自动将旧版本复制到新表中。
在任何一种情况下,您都需要查询当前表和更改表,以检查您需要突出显示的更改。
您还需要确定何时不再需要突出显示更改。只需删除更改表中的旧行即可删除更改,但您需要决定何时应该执行更改。您可以使用MySQL event定期剔除更改,也可以将此维护与系统中的其他触发器或操作联系起来。
实施细节需要根据您的系统和期望来决定。
使用触发器和事件的优点是更改可以限制在数据库中,除非需要突出显示更改。