簡體   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