Historie mit Feldnamen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Historie mit Feldnamen

    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ß

  • #2
    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
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      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ß

      Kommentar


      • #4
        Zitat von Skrok Beitrag anzeigen
        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.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          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ß

          Kommentar


          • #6
            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
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              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

              Kommentar


              • #8
                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:
                Code:
                insert into history (`date`, `rowid`, `colname`, `oldvalue`, `newvalue`)
                select now(), table.id, '[B]vorname[/B]', table.[B]vorname[/B], NEW.[B]vorname[/B]
                from table
                where table.id = NEW.id and table.[B]vorname[/B] != NEW.[B]vorname[/B];
                
                insert into history (`date`, `rowid`, `colname`, `oldvalue`, `newvalue`)
                select now(), table.id, '[B]nachname[/B]', table.[B]nachname[/B], NEW.[B]nachname[/B]
                from table
                where table.id = NEW.id and table.[B]nachname[/B] != NEW.[B]nachname[/B];
                
                ...
                Zuletzt geändert von AmicaNoctis; 01.03.2010, 15:05. Grund: Erfassung der ID ergänzt, macht ja vielleicht Sinn ;)
                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                Super, danke!
                [/COLOR]

                Kommentar


                • #9
                  WARGH! Okay ich machs mit PHP! Definitv!

                  Kommentar


                  • #10
                    Oder du generierst den Trigger mit PHP. Es gibt ja viele Möglichkeiten.
                    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                    Super, danke!
                    [/COLOR]

                    Kommentar

                    Lädt...
                    X