Mailinglisten-Archive |
>hallo liste, >folgendes problem: >ein datensatz wird per eingabemaske (php) editiert - und soll wieder in >geänderter form in die DB eingetragen werden. >davor soll aber die änderung erkannt und mitprotokolliert werden. >ziel: >beim datensatz ein button "archiv" mit all den veränderungen in laufe >der zeit. >ich habe folgenden denkansatz: >bevor das UPDATE gefahren wird soll der datensatz noch einmal davor >rausgeholt werden und mit den neuen daten verglichen werden - ist eine >änderung in einem feld, dann schreibt das script das in eine >"veränderungstabelle". >richtiger weg ?? oder gibt es da etwas in mysql, das das von haus aus >geht? >bin schon am verzweifeln, da der weg in PHP steinig wird, weil über 50 >felder... Hi Tom, Ich denke das ist der falsche Weg... Dafür gibts vekettete Listen: Dazu benötigst du 1. Eine id (autoincrement) 2. Eine id_root (Stamm - ID des ersten inserts) default 0 3. Eine id_ref (Referenz auf die nächste Änderung) default 0 4. Ein Timestampfeld (für die Suche Änderung ab.. hilfreich) 5. Beliebige Daten So nun tragen wir den ersten DS ein: id id_root id_ref Daten 1 0 0 irgendwas Wurde nun der DS verändert wird 1. Ein neuer DS eingtragen: id id_root id_ref Daten 2 1 0 irgendwas_anderes 2. Der alte DS angepasst: id id_root id_ref Daten 1 0 2 irgendwas Dann erhalten wir: id id_root id_ref Daten 1 0 2 irgendwas 2 1 0 irgendwas_anderes Bei der nächsten Änderung schauts dann so aus: id id_root id_ref Daten 1 0 2 irgendwas 2 1 3 irgendwas_anderes 3 1 0 irgendwas_anderes_neues usw. Was nützt jetzt das: 1. Alle Datensätze mit id_ref = 0 sind aktuell. 2. Alle Datensätze mit id_root = 0 sind die ersten ursprünglichen Daten. 3. Alle Datensätze mit id_root = 0 und id_ref = 0 wurden nie verändert. Damit lassen sich mit relativ einfachen SQL - Anweisungen z.B. alle Änderungen anzeigen, die aktuellen DS finden und auch ganze DS - Gruppen löschen. z.B. DELETE form Tabelle where id = 1 OR id_root = 1; Damit wäre jetzt der DS mit allen Änderungen gelöscht. Du benötigst also gar keine Veränderungstabelle. Aktuelle DS finden: Select * from Tabelle where id_ref = 0; Alle Änderungen: SELECT * form Tabelle where id = 1 OR id_root = 1; Ursprünglicher und letzte Änderung: SELECT * form Tabelle where id = 1 AND (id_root = 0 OR id_ref = 0); and so on... MfG Wolfgang -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive