Mysql 将父表中的n列插入或更新到历史表的2列中的查询

Mysql 将父表中的n列插入或更新到历史表的2列中的查询,mysql,sql,database,triggers,audit-trail,Mysql,Sql,Database,Triggers,Audit Trail,我需要PHP-MYSQL查询历史表(代码):我知道我必须做什么和如何做,但不知道如何为它编写MYSQL查询,也不知道如何在PHP页面中列出。下面是我的想法和想要实现的 我的产品表为:产品表 id | cat_id | Subcat |productname | weight | assigned_to | status_id --------------------------------------------------------------------------- 1 |

我需要PHP-MYSQL查询历史表(代码):我知道我必须做什么和如何做,但不知道如何为它编写MYSQL查询,也不知道如何在PHP页面中列出。下面是我的想法和想要实现的

我的产品表为:产品表

id | cat_id   | Subcat |productname | weight    | assigned_to  | status_id
---------------------------------------------------------------------------
1  |   11     |   2    |     P1     | 5.8       |        8     |   1
2  |   12     |   3    |     P2     | 6.7       |        27    |   2
它们是product_表下的主要列,如add_date、update_date等

现在,如果我插入或更新我的产品表(产品表)那么它的每个记录无论是新的(插入)记录还是更新记录,都应该在我的历史表(历史表)中插入/更新,如下所示:

*以下是在product_表中插入新值时,以及在历史记录表下插入新值时的情况,如下所示:*

id | pid   |  cat_id   | sub_cat   | old_value    |  new_value   | filed_name     | date_m  
---------------------------------------------------------------------------------------------------------
1  |  1    |   11      |   2       |     0        |     P1       |   productname  | 2014-01-17 05:05:21
2  |  1    |   11      |   2       |     0        |     5.8      |   weight       | 2014-01-17 05:05:21
3  |  1    |   11      |   2       |     0        |     8        |   assigned to  | 2014-01-17 05:05:21
4  |  1    |   11      |   2       |     0        |     1        |   status       | 2014-01-17 05:05:21
现在,当在product table:下记录1被更新时,则在history table下更新记录1,如下所示:

id | pid   |  cat_id   | sub_cat   | old_value    |  new_value   | field_name    |  date_m 
--------------------------------------------------------------------------------------------------------
1  |  1    |   11      |   2       |     P1       |     P2       |   productname |  2014-01-18 03:05:22
2  |  1    |   11      |   2       |     5.8      |     5.4      |   weight      |  2014-01-18 03:05:22
3  |  1    |   11      |   2       |     8        |     7        |   assigned to |  2014-01-18 03:05:22
4  |  1    |   11      |   2       |     1        |     4        |   status      |  2014-01-18 03:05:22
因此,当我看到id:1的产品页面时,它将如下所示:

     Date            | User  |     field_name       |  Change
-----------------------------------------------------------------------------------
2014-01-17 05:05:21  | admin |     productname      |       =>  P1
2014-01-17 05:05:21  | admin |     weight           |       =>  5.8
2014-01-17 05:05:21  | admin |     assigned to      |       =>  8
2014-01-17 05:05:21  | admin |     status           |       =>  1 

2014-01-18 03:05:22  | admin |     productname      |  P1   =>  P2
2014-01-18 03:05:22  | admin |     weight           |  5.8  =>  5.4
2014-01-18 03:05:22  | admin |     assigned to      |  8    =>  7 
2014-01-18 03:05:22  | admin |     status           |  1    =>  4

因此,这就是我想实现的,但没有得到在插入和更新时应该编写的代码(mysql),因此product_表中的某些列(我想)应该在history_表的2列中插入/更新,并按照上面定义的顺序重置。以及如何在我的产品页面上显示历史记录。

在插入触发器后创建
在更新触发器后在表
产品表
上创建

检查此链接


  • @Saharsh bhai,首先感谢您的回复。。亲爱的,我已经通过上面的链接,但正如所说的,我希望在我的历史表中既有旧的和新的价值。。因此,我不知道如何在更新前和更新后一起编写TIGGER,因为更新前我将获得旧值,更新后我将获得新值……以及如何更新或将产品表中的4列(产品名称、重量、分配对象、状态id)值插入2列(旧值、新值)如中所示的历史记录表和重置列。请参见上述结构