1

大家好,请帮助我有一个联系人表,我可以在其中使用 PHP 网页插入、删除、修改数据库....但只有当前的更改才会更新到数据库。我想要的是如何维护数据库的历史......有没有使用(PHP / MYSQL)的教程。我尝试为患者创建 MySQL 表版本......如何进一步进行。

 CREATE TABLE IF NOT EXISTS `contact` (
  `name` varchar(30) NOT NULL,
  `phone` varchar(12) NOT NULL,
  `mobile` varchar(12) NOT NULL,
  `email` varchar(30) NOT NULL,
  `address` text NOT NULL,
  `conid` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`conid`)
  ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ; # MySQL returned an empty result set (i.e. zero rows).

   CREATE TABLE IF NOT EXISTS `contactversion` (
   `name` varchar(30) NOT NULL,
   `phone` varchar(12) NOT NULL,
   `mobile` varchar(12) NOT NULL,
   `email` varchar(30) NOT NULL,
   `address` text NOT NULL,
   `conid` int(11) NOT NULL,
   `revision_id` int(11) AUTO_INCREMENT,
    type ENUM('INSERT', 'UPDATE', 'DELETE') NOT NULL,
   `change_time` DEFAULT current_timestamp,
    PRIMARY KEY (`revision_id`)
 );

接下来做什么....

4

2 回答 2

0

运行查询联系人时,只需在之前运行此操作即可获取当前联系人并将其复制到您的修订表中......

"INSERT INTO 
    contactversion (name,phone,mobile,email,address,conid,type) 
    SELECT 
        name,phone,mobile,email,address,conid,'".$type."' as type 
    FROM contact 
    WHERE conid='".$conid."'"

两个表都需要相同,contactversion 的 type 和 change_time 作为最后一列。

很明显,这个查询应该在联系表的 UPDATE 和 DELETE 之前运行,但在 INSERT 之后。如果您使用另一个 where 子句而不是 conid 更新多个联系人,您需要考虑在变量中构建 where 语句以在 INSERT 的 SELECT 和 UPDATE/DELETE 中使用它

于 2013-09-07T10:16:43.163 回答
-1

在创建 contactversions 表时,确保 conid 不应该是主键并自动递增。我希望这是造成问题的原因。

于 2016-07-15T09:49:07.323 回答