Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Historie mit Feldnamen [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Historie mit Feldnamen


 
Skrok
01-03-2010, 12:47 
 
Hallo,

ich habe mir gerade die Frage gestellt ob ich per Trigger ermitteln kann welches Feld geändert worden ist. Wäre schön für eine History die ich bei einer Tabelle schreiben muss.

Die Änderungen zu Protokolieren ist ja kein problem nur ich bekomme den Feldnamen nicht raus. Jemand einen Tip?

Gruß

 
AmicaNoctis
01-03-2010, 13:40 
 
Hallo,

die einfachste Lösung wäre, den alten und den neuen Datensatz mit PHP (o. ä.) zu vergleichen und darüber die geänderten Spaltennamen zu ermitteln.

Gruß,

Amica

 
Skrok
01-03-2010, 14:41 
 
Oh nee da haben wir uns mißverstanden! Ich will den Spaltennamen ermitteln in dem eine Änderung stattgefunden hat.

zB.:

User A hat in db.tabelleA das Feld tabelleA.Feld geändert. Wie bekomme ich den den Feld-Namen von tabelleA.Feld heraus?

Gruß

 
AmicaNoctis
01-03-2010, 14:53 
 
Oh nee da haben wir uns mißverstanden!

Entweder haben wir das nicht oder wir tun es immer noch.

Mit MySQL kriegst du das nicht so einfach raus. Mit PHP wärst du da besser dran. Irgendein Programm schreibt ja diese Änderung in die DB, die wird ja sicher nicht vom User direkt über SQL-Befehle eingepflegt. Dieses Programm hat also Zugriff auf die alten und neuen Daten und kann sie hinsichtlich geänderter Feldwerte vergleichen.

 
Skrok
01-03-2010, 15:11 
 
Richtig. Aber über php dauert das bei 11.000 Datensätzen eventuell ein wenig lange wenn die über nen Script (cronjob) geändert werden. Auch das muss ich leider mitschreiben. Daher dachte ich an nen Trigger. Mit Feldänderungen kein Problem nur halt mit dem Filtern der Spaltennamen.

Gruß

 
AmicaNoctis
01-03-2010, 15:18 
 
Ok, dann halt per Trigger. Nur musst du den für jede zu überwachende Tabelle neu schreiben, weil innerhalb von Triggern keine dynamischen Statements möglich sind und du daher jede Spalte einzeln und festgecodet ansprechen musst.

Ich würde es trotzdem mit PHP machen :)

 
Skrok
01-03-2010, 15:25 
 
hmm okay ich werde es mal in PHP machen und schauen wieviel Zeit zusätzlich benötigt wird ... kannst du mir dennoch einen Tip geben wir ich in nem Trigger den Spaltennamen ermittel? Ich würde gerne mein Wissen um diesen "Punkt" erweitern!

Gruß und danke

 
AmicaNoctis
01-03-2010, 15:46 
 
Na wie gesagt: das geht nur festgecodet. Du musst also jede Spalte ein Insert-Statement schreiben, welches den alten Wert für diese Spalte mit dem neuen vergleicht und das bei Ungleichheit in eine History-Tabelle einträgt.

Also z. B. so:

insert into history (`date`, `rowid`, `colname`, `oldvalue`, `newvalue`)
select now(), table.id, 'vorname', table.vorname, NEW.vorname
from table
where table.id = NEW.id and table.vorname != NEW.vorname;

insert into history (`date`, `rowid`, `colname`, `oldvalue`, `newvalue`)
select now(), table.id, 'nachname', table.nachname, NEW.nachname
from table
where table.id = NEW.id and table.nachname != NEW.nachname;

...

 
Skrok
01-03-2010, 15:57 
 
WARGH! Okay ich machs mit PHP! Definitv!

 
AmicaNoctis
01-03-2010, 16:24 
 
Oder du generierst den Trigger mit PHP. Es gibt ja viele Möglichkeiten.


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:24 Uhr.