我必须在PHP中创建一个代码,允许我在MySQL数据库中保存记录更新的历史记录,这样我就可以按日期找到旧的修订版本。
下面是我真正想要实现的示例:http://en.wikipedia.org/w/index.php?title=Tunisia&action=history
这些数据主要是我们记录的关于公司的数字,用于生成报告和提取指数。
我计划使用codeigniter,因为它的简单性,我正在寻找一个框架或开源项目的想法,使用相同的方法来保存数据库中的修改历史。
发布于 2010-03-29 17:33:46
最简单的解决方案(取决于您的特定需求)可能是向表中添加一个on update/insert/delete触发器,以便在插入/更新/删除数据时执行额外的日志记录。这样一来,即使是对数据库的手动干预也会被覆盖。
有关更多信息,请查看http://dev.mysql.com/doc/refman/5.1/en/triggers.html。
发布于 2010-03-29 17:25:21
保存版本历史的一种简单方法是创建一个基本上相同的表(例如,带有_version后缀)。这两个表都有一个版本字段,对于主表,您可以在每次更新时递增该字段。version表在(id, version)上有一个复合主键。
每当对实际表进行更新时,都会在version表中插入包含重复数据的新行。无论何时你想找到版本历史,你所需要做的就是像SELECT * FROM content_version WHERE id = CONTENT_ID ORDER BY version这样的东西。
如果你使用Doctrine ORM之类的东西,它有一个行为,可以通过事件侦听器自动为你做这件事。你可以在这里查看:http://www.doctrine-project.org/documentation/manual/1_2/en/behaviors#core-behaviors:versionable
发布于 2013-03-26 04:54:05
有一个开源(麻省理工学院许可证)框架来构建CRM和ERP类型的数据库驱动的web应用程序。您可以从http://epe.si/下载EPESI,也可以从SourceFroge下载:http://sourceforge.net/projects/epesi/
EPESI的CRUD引擎- Record Browser -具有非常有效的记录历史记录以及其他功能,如高级权限系统(细化到字段级别)等。
单个记录集将数据存储在多达10个表中,并且它与数据库无关(使用PHPAdoDB)。一个名为recordset_data的表存储“原始”数据,更改历史记录存储在另外两个表中:recordset_edit_history和recordset_edit_history_data.
Record的edit_history的结构如下:
时间戳ID(此表的主键,index)
Record的edit_history_data的结构如下:
编辑字段值=
它是一个非常快速和高效的引擎,它不是在记录上存储更改,而是在单个字段级别上存储更改。
https://stackoverflow.com/questions/2536819
复制相似问题