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

时间:2014-01-18 05:50:34

标签: mysql sql database triggers audit-trail

我需要历史表的PHP-MYSQL查询(代码):我知道我必须做什么以及如何 - 但是没有得到如何为它编写mysql查询以及在php页面中列出相同的内容。以下是我的想法并希望实施。

我的产品表为: product_table

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_table下更为重要,例如add_date,update_date ..etc

现在,如果我插入或更新我的产品表(product_table),那么它的每条记录是新的(插入)还是更新记录,它应该在我的历史记录表中插入/更新( history_table) as:

*以下是在product_table中插入新值时的内容,同样在历史记录表下显示,如下所示:*

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

现在,当在产品表下:记录1更新时,同样在历史表AS下面:

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_table中的列应该在history_table的2列中插入/更新并按上面的定义重置为coloumn。以及我如何在我的产品页面上显示历史。

1 个答案:

答案 0 :(得分:0)

在表格AFTER INSERT TRIGGER上创建AFTER UPDATE TRIGGERproduct_table

检查此链接

  1. CREATE TRIGGER SYNTAX
  2. CREATE TRIGGER FOR HISTORY TABLE