Hallo Leute,
ich möchte für mein aktuelles Projekt eine Art Updateverlauf anlegen.
Immer, wenn ich eine Zeile in einer Tabelle aktualisiere (sprich UPDATE), möchte ich die vorherigen Werte in einer Tabelle abspeichern, inklusive des Zeitpunktes des Updatebefehls.
Meine beiden Tabellen, die dafür herhalten sollen baue ich derzeit wie folgt auf:
[src=mysql]CREATE TABLE IF NOT EXISTS Sicherung (
ID BIGINT NOT NULL AUTO_INCREMENT,
Datum DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
mTabelle VARCHAR(64) NOT NULL,
mID INTEGER NOT NULL,
PRIMARY KEY(ID))
CREATE TABLE IF NOT EXISTS Sicherungsspalten (
ID BIGINT NOT NULL AUTO_INCREMENT,
VorgangsID BIGINT NOT NULL,
Spaltenname VARCHAR(64) NOT NULL,
Wert VARCHAR(300),
PRIMARY KEY(ID),
UNIQUE(VorgangsID, Spaltenname))[/src]
Ich möchte allerdings die Daten, die ich in meiner zweiten Tabelle speichere etwas verringern. Daher habe ich mir gedacht, nur Daten aus der Tabelle, die geupdated wird, auszulesen, die wirklich verändert werden. Ein Problem habe ich dabei aber, welches ich derzeit nicht lösen kann:
Ich möchte das Skript für x Tabellen nutzen können. Diese haben unterschiedlich viele Spalten mit unterschiedlichen Namen.
Ich habe mir gedacht, ich baue einen SELECT wie:
[src=mysql]/*pseudo*/SELECT IF(COl1 <> NeuerWert, COL1, NULL) FROM table WHERE ID=Datensatzid[/src]
Jetzt frage ich mich allerdings, wie ich durch die Spalten sozusagen iterieren kann.
Noch als Hinweis: Ich arbeite hauptsächlich mit Prepared Statements. Ich denke das dürfte die Sache etwas einfacher machen - dennoch recht aufwändig.
Wie bewerkstellige ich das am besten?
Danke bereits im Voraus!
ich möchte für mein aktuelles Projekt eine Art Updateverlauf anlegen.
Immer, wenn ich eine Zeile in einer Tabelle aktualisiere (sprich UPDATE), möchte ich die vorherigen Werte in einer Tabelle abspeichern, inklusive des Zeitpunktes des Updatebefehls.
Meine beiden Tabellen, die dafür herhalten sollen baue ich derzeit wie folgt auf:
[src=mysql]CREATE TABLE IF NOT EXISTS Sicherung (
ID BIGINT NOT NULL AUTO_INCREMENT,
Datum DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
mTabelle VARCHAR(64) NOT NULL,
mID INTEGER NOT NULL,
PRIMARY KEY(ID))
CREATE TABLE IF NOT EXISTS Sicherungsspalten (
ID BIGINT NOT NULL AUTO_INCREMENT,
VorgangsID BIGINT NOT NULL,
Spaltenname VARCHAR(64) NOT NULL,
Wert VARCHAR(300),
PRIMARY KEY(ID),
UNIQUE(VorgangsID, Spaltenname))[/src]
Ich möchte allerdings die Daten, die ich in meiner zweiten Tabelle speichere etwas verringern. Daher habe ich mir gedacht, nur Daten aus der Tabelle, die geupdated wird, auszulesen, die wirklich verändert werden. Ein Problem habe ich dabei aber, welches ich derzeit nicht lösen kann:
Ich möchte das Skript für x Tabellen nutzen können. Diese haben unterschiedlich viele Spalten mit unterschiedlichen Namen.
Ich habe mir gedacht, ich baue einen SELECT wie:
[src=mysql]/*pseudo*/SELECT IF(COl1 <> NeuerWert, COL1, NULL) FROM table WHERE ID=Datensatzid[/src]
Jetzt frage ich mich allerdings, wie ich durch die Spalten sozusagen iterieren kann.
Noch als Hinweis: Ich arbeite hauptsächlich mit Prepared Statements. Ich denke das dürfte die Sache etwas einfacher machen - dennoch recht aufwändig.
Wie bewerkstellige ich das am besten?
Danke bereits im Voraus!
Zuletzt bearbeitet: