2013-05-23 11 views
5

Ich arbeite an einer Datenbankanwendung mit MySQL und PHP. In diesem Moment versuche ich die Änderungen zu bekommen, die durch das letzte UPDATE verursacht wurden. Mein erster Weg, das Problem zu lösen, istMySQL: Wie bekomme ich Änderungen vom letzten UPDATE?

  • den ‚alten‘ Zustand mit SELECT bekommen
  • tun die Änderungen mit UPDATE
  • immer die ‚neuen‘ Zustand mit SELECT
  • Vergleich der Arrays mit PHP

dies sind drei mysql-Verbindungen ...

gibt es eine Möglichkeit, dies zu verkürzen?

+2

Speichern Sie den Originalzustand, wenn Sie das Formular lokal laden und vergleichen Sie dann, was Sie im Update auch lokal senden? Es gibt keinen Grund, MySql dazu zu bewegen, die Änderungen herauszufinden. – JCleveland

+0

Da Sie eigentlich sowieso den beabsichtigten "neuen" Zustand im Speicher haben, könnten Sie mindestens den zweiten SELECT speichern. Solange Ihr UPDATE keinen Fehler meldet, können Sie sich ziemlich auf die Tatsache verlassen, dass der Datenbankstatus das ist, was Sie denken. Um mehr zu sagen, wäre es schön zu wissen, was genau Sie mit diesem Delta vorhaben. – joerx

+0

Müssen Sie nur bestimmen, wie viele Zeilen betroffen waren, oder ist ein detaillierter Datenvergleich erforderlich? –

Antwort

1

lassen Sie mich Ihnen sagen, wie ich das tun,

, wenn ich ich eine Zeile aktualisieren, erstens ich bekommen, welche Zeile ich bin zu aktualisieren, und ich nenne sie active records. Dann vergleiche ich jede Spalte von active records mit den Formularfeldern. So weiß ich, welche Spalte sich geändert hat.

und wenn Sie geänderte Spalten speichern möchten, erstellen Sie history Tabelle, die wie wäre;

id  (for primary key) 
tablename (which table i'm updating) 
recordid (which row i'm updating) 
column (which columns has been changed) 
oldvalue (active record value) 
newvalue (form value-updated value) 
date  (obvious) 
user  (who did this change) 

danach können Sie Ihre Fantasie für Strukturen nutzen, wie Sie verwenden möchten.

1

Sie könnten eine before update trigger tun, die eine vollständige Kopie des Datensatzes an einen History-Tabelle schieben wird, die auch speichern Sie zusätzliche Zustandsdaten enthält möchten (aktualisiert Datum, Benutzer etc.)

diese Weise erhalten Sie eine haben vollständige Überarbeitungsgeschichte dessen, was mit welchen Datensätzen passiert ist und es sollte transparent passieren. Denken Sie nur daran, sich daran zu erinnern, dass Sie alle eindeutigen Einschränkungen aus der Verlaufstabelle löschen sollten.

Hoffe, das hilft.

Verwandte Themen