[英]Is there a way to get field => value pairs from a subselect in MySQL?
我正在考虑如何最好地在MySQL支持的应用程序中实施审核跟踪。 一些系统访问相同的数据库和表,因此我认为触发器将是最佳解决方案。
但是,我不想为每个表手动编写触发器,因此我希望自动记录每个插入/删除的字段名称和数据。
就像是:
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。
SELECT CONCAT('id = ', id, ', name = ''', name, ''', another_field = ''', data, '''')
FROM NEW
您可以串联字符串。
例如:
select concat("id = ", t.id, "name = ", t.name) from myTable t;
我最终写了一个PHP脚本来遍历每个相关表并为我构建触发器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.