2009-06-24 3 views
1

Ich überlege mir, wie man am besten einen Audit Trail in einer App implementiert, die von MySQL unterstützt wird. Einige Systeme greifen auf die gleiche Datenbank und Tabellen zu, weshalb ich der Meinung bin, dass Trigger die beste Lösung sind.Gibt es eine Möglichkeit, field => value-Paare aus einem Subselect in MySQL zu erhalten?

Allerdings möchte ich nicht manuell einen Trigger für jede Tabelle schreiben, so dass ich suche automatisch den Feldnamen und Daten für jede einfügen/löschen.

Etwas wie:

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

jedoch kehrt der subselect einen Satz einreihige Ergebnis, das nicht als String behandelt werden. Ich möchte eine Funktion, die diese Zeile übernimmt und in folgende Zeile konvertiert:

Oder so etwas.

Edit: Der Hauptpunkt hier ist, dass ich nicht jedes Feld in jeder Tabelle eingeben müssen. Es gibt über 120 Tabellen und einige haben> 100 Felder. Wenn es in MySQL selbst nicht möglich ist, werde ich ein kleines Programm schreiben, um jede Tabelle und jedes Feld zu drehen und die SQL für mich zu generieren.

Antwort

0

Ich schrieb schließlich einen PHP-Skript über die jeweilige Tabelle in einer Schleife und die Auslöser für mich bauen.

0

nur

SELECT GROUP_CONCAT (col1) FROM Yourtable

aber diese Rückkehr alle Feld durch Komma als Trennzeichen oder andere Trennzeichen, das Sie erklären können.

link

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

Sie können nur die Saiten verketten.

z:

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

Der Punkt ist, dass ich nicht jedes Feld in jeder Tabelle eingeben müssen. Es gibt über 120 Tabellen und einige haben> 100 Felder. Wenn es nicht möglich ist, denke ich, dass ich ein kleines Programm schreiben muss, um über jede Tabelle und Feld zu drehen und das SQL für mich zu generieren. – Drarok

Verwandte Themen