Mailinglisten-Archive |
Herr Ing. Thomas Kolditz schrieb: >vor ein paar tagen hab ich mich mit diesem probelm an euch gewandt. >leider hat mir keiner von euch so richtig helfen können. >nun gibts von mir eine lösung dazu! Sehr geehrter Herr Ing. Thomas Kolditz, Ich weiss überhaupt nicht warum ich auf dieser Liste antworten soll wenn die Fragesteller für sich selbst antworten und die Hinweise der Listenmitglieder die sich bemühen anderen Leuten zu helfen einfach ignorieren!!! Hier nochmals die Mail vom 19.03.2003 15:50: <Schnipp> >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 </Schnapp> Es bleibt den Listenmitgliedern selbst vorbehalten was sie davon denken... MfG Wolfgang -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive