有没有办法获得field => MySQL中的子选择的值对?

时间:2009-06-24 13:32:06

标签: mysql

我正在考虑如何在应用程序中最好地实现Audit Trail,该应用程序由MySQL支持。一些系统访问相同的数据库和表,所以我认为触发器是最好的解决方案。

但是,我不想为每个表手动编写触发器,因此我希望自动记录每个插入/删除的字段名称和数据。

类似的东西:

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

但是,subselect将返回单行结果集,不能将其视为字符串。我想要一个将该行转换为:

的函数
"id = 1, name = 'something', another_field = 'data'"

或类似的东西。

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

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

SELECT GROUP_CONCAT(col1)FROM yourtable

但是这会以逗号分隔符或您可以声明的其他分隔符返回所有字段。

link

答案 2 :(得分:0)

你可以连接字符串。

e.g:

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

答案 3 :(得分:0)

我最终编写了一个PHP脚本来遍历每个相关的表并为我构建触发器。