繁体   English   中英

有没有办法从MySQL的子选择中获取字段=>值对?

[英]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

只要

从您的表中选择GROUP_CONCAT(col1)

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

链接

您可以串联字符串。

例如:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM