2009-06-24 99 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

相關問題