如何在mysql中保持当前和以前的记录

时间:2013-09-07 09:56:14

标签: php mysql

嗨,任何人请帮助我有一个联系表,我可以使用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`)
 );

下一步做什么......

2 个答案:

答案 0 :(得分: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的类型和change_time作为附加的最后一列。

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

中使用它。

答案 1 :(得分:-1)

创建contactversions表时,请确保conid不应是主键并自动递增。我希望这会导致问题。