2009-06-24 104 views
1

我正在考虑如何最好地在一个应用程序,它是由MySQL支持实施跟踪审核。一些系统访问相同的数据库和表,所以我认为触发器将是最好的解决方案。有没有办法从MySQL的子查询中获得field => value对?

不过,我不想手动编写为每个表触发,所以我在寻找自动登录的字段名称和数据每次插入/删除。

喜欢的东西:

INSERT INTO `audits` SET 
    `table_name` = 'jobs', 
    `table_key` = OLD.`id`, 
    `changed_at` = NOW(), 
    `notes` = (SELECT * FROM NEW); 

然而,子查询将返回一行结果集,这不能被视为字符串。我想要一个功能,将采取该行并将其转换为:

"id = 1, name = 'something', another_field = 'data'" 

或类似的东西。

编辑:这里主要的一点是,我不希望有在各个领域中的每一个表类型。有超过120张桌子,有些桌子超过100个。如果在MySQL本身中不可能,我想我会编写一个小程序来旋转每个表和字段并为我生成SQL。

回答

0

我终于写了一个PHP脚本遍历每个相关表格,并建立触发器我。

0

只有

SELECT GROUP_CONCAT(COL1)FROM yourtable

但这回所有现场由逗号分隔符或其他分隔符,你可以声明。

link

1
SELECT CONCAT('id = ', id, ', name = ''', name, ''', another_field = ''', data, '''') 
FROM NEW 
0

您只需在连接字符串。

e.g:

select concat("id = ", t.id, "name = ", t.name) from myTable t; 
+0

的一点是,我不希望有在各个领域中的每一个表类型。有超过120张桌子,有些桌子超过100个。 如果这是不可能的,我想我得写一个小程序,以各表和字段旋转过来,生成SQL我。 – Drarok 2009-06-24 13:43:50

相关问题