6

我正在使用 MySQL 和 PHP 开发数据库应用程序。此刻,我正在尝试获取上次 UPDATE 引起的更改。我解决问题的第一种方法是

  • 使用 SELECT 获得“旧”状态
  • 使用 UPDATE 进行更改
  • 使用 SELECT 获得“新”状态
  • 将数组与 php 进行比较

这是三个mysql连接......

有什么办法可以缩短这个吗?

4

3 回答 3

3

您可以执行更新前触发器,将记录的整个副本推送到历史表中,该表还包含您希望存储的其他状态数据(更新日期、用户等)

这样,您将拥有完整的修订历史记录,记录发生的事情,并且应该透明地发生。只想记住你应该从历史表中删除任何唯一的约束。

希望这可以帮助。

于 2013-05-23T21:06:42.787 回答
1

让我告诉你我是怎么做到的,

当我更新一行时,首先我得到我正在更新的行,然后我调用它们active records。然后我将每一列active records与表单字段进行比较。这就是我知道哪一列发生了变化的方式。

如果您想存储更改的列,请创建history类似的表;

id        (for primary key)
tablename (which table i'm updating)
recordid  (which row i'm updating)
column    (which columns has been changed)
oldvalue  (active record value)
newvalue  (form value-updated value)
date      (obvious)
user      (who did this change)

之后,您可以将您的想象力用于您想要使用的结构。

于 2013-05-23T20:56:31.500 回答
1

您可以使用以下 hack 使用变量:

update table set 
col=(@oldValue:=col),col=newValue
where id=1234;
select @oldValue;
于 2018-07-17T07:36:46.537 回答