Schuberto: MySQL UPDATE nur bei veränderungen ausführen

Hallo,

ich bin noch neu in der MySQL Programmierung und habe ein Problem mit dem MySQL UPDATE.
Soweit ich verstehe wird ein UPDATE nur gespeichert, wenn die einzufügenden Werte nicht mit den vorhandenen Werten übereinstimmen. So weit so gut. Mein Problem ist nun, dass ich, wenn es eine Änderung gibt, auch den Autor der Änderung speichern muss. Da der Autor aber nicht immer der gleiche ist, kommt es in diesen Fällen immer zu einem UPDATE obwohl die anderen Felder unverändert bleiben.
Meine Frage ist nun, gibt es eine MySQL interne Lösung um erst nach Änderungen zu schauen und dann eventuell den Autor zu aktualisieren oder muss ich vorab alle Einträge mit PHP auf Veränderung prüfen?

Ich hoffe, dass mir einer hier weiterhelfen kann oder vielleicht eine gutes Tutorial kennt.

Grüße

Schuberto

  1. Hi!

    Soweit ich verstehe wird ein UPDATE nur gespeichert, wenn die einzufügenden Werte nicht mit den vorhandenen Werten übereinstimmen.

    Ein UPDATE löst nur dann einen Schreibvorgang aus, wenn sich Daten in einem Feld geändert haben. Das tangiert dich als Programmierer aber nur im Ergebnis von Funktionen wie mysql_affected_rows(). Ansonsten ist es doch egal, ob MySQL was schreibt oder nicht? Selbst vorher zu testen ob es Änderungen gibt, ist letztlich wegen des zusätzlichen SELECTs inklusive Datenabfrage weder einfacher zu programmieren noch schneller ausgeführt.

    Mein Problem ist nun, dass ich, wenn es eine Änderung gibt, auch den Autor der Änderung speichern muss. Da der Autor aber nicht immer der gleiche ist, kommt es in diesen Fällen immer zu einem UPDATE obwohl die anderen Felder unverändert bleiben.

    Der Autor ist also ein Feld der vom UPDATE betroffenen Tabelle?

    Meine Frage ist nun, gibt es eine MySQL interne Lösung um erst nach Änderungen zu schauen und dann eventuell den Autor zu aktualisieren oder muss ich vorab alle Einträge mit PHP auf Veränderung prüfen?

    Was für ein Problem hast du denn, wenn du einfach den vollständigen Datensatz inklusive Autor updatest und MySQL einfach selbst entscheiden lässt, für welche Felder es einen Schreibvorgang vornimmt? Wenn du eine interne Lösung (für welches konkrete Problem auch immer) erstellen willst, kannst du dir eine Stored Procedure programmieren.

    Lo!

    1. Ein UPDATE löst nur dann einen Schreibvorgang aus, wenn sich Daten in einem Feld geändert haben. Das tangiert dich als Programmierer aber nur im Ergebnis von Funktionen wie mysql_affected_rows(). Ansonsten ist es doch egal, ob MySQL was schreibt oder nicht? Selbst vorher zu testen ob es Änderungen gibt, ist letztlich wegen des zusätzlichen SELECTs inklusive Datenabfrage weder einfacher zu programmieren noch schneller ausgeführt.

      Daher dachte ich ja das es so etwas gibt wie ON duplicate KEY UPDATE für UPDATES. Quasi 'ON UPDATE set autor = $autor'. Das meinte ich mit intern.

      Der Autor ist also ein Feld der vom UPDATE betroffenen Tabelle?

      Sorry, wenn ich da nicht so richtig ausgedrückt habe.

      Was für ein Problem hast du denn, wenn du einfach den vollständigen Datensatz inklusive Autor updatest und MySQL einfach selbst entscheiden lässt, für welche Felder es einen Schreibvorgang vornimmt? Wenn du eine interne Lösung (für welches konkrete Problem auch immer) erstellen willst, kannst du dir eine Stored Procedure programmieren.

      Mein Problem daran ist, dass es sich um ein Preis Tabelle handelt und jede Veränderung vom Benutzer gespeichert werden muss. Es kommt allerdings nicht immer zu Änderungen, dann darf das System auch nicht den Benutzer speichern.

      Ich hoffe es jetzt besser erklärt zu haben.

      Und Danke für die schnelle Antwort

      Schuberto

      1. Hallo,

        Mein Problem daran ist, dass es sich um ein Preis Tabelle handelt und jede Veränderung vom Benutzer gespeichert werden muss. Es kommt allerdings nicht immer zu Änderungen, dann darf das System auch nicht den Benutzer speichern.

        ich gehe davon aus, dass Deine UPDATE-Anweisung eine WHERE-Klausel enthält. Ergänze diese um eine zusätzliche Bedingung, die erfüllt sein muss (d.h. ein logisches UND): Die Bedingung lautet, dass sich irgendein Spalteninhalt geändert haben muss. Gibt es nur eine Spalte, die sich ändern darf, wäre es das. Gibt es mehrere Spalten, die geändert werden können, so verknüpfe diese mit einem logischen ODER. Denke in diesem Fall daran, die gesamte ODER-Gruppe zu klammern.

        Freundliche Grüße

        Vinzenz

        1. ich gehe davon aus, dass Deine UPDATE-Anweisung eine WHERE-Klausel enthält. Ergänze diese um eine zusätzliche Bedingung, die erfüllt sein muss (d.h. ein logisches UND): Die Bedingung lautet, dass sich irgendein Spalteninhalt geändert haben muss. Gibt es nur eine Spalte, die sich ändern darf, wäre es das. Gibt es mehrere Spalten, die geändert werden können, so verknüpfe diese mit einem logischen ODER. Denke in diesem Fall daran, die gesamte ODER-Gruppe zu klammern.

          Freundliche Grüße

          Vinzenz

          Vinzenz,

          das ist es. Hab den ganzen Wald vor lauter Bäumen nicht gesehen. Ich danke dir. Einfach und effektiv.

          Auch ich Grüße freundlich zurück

          Schuberto

          1. Wie schließt man eigentlich den Post?

            Schuberto

            1. Hi!

              Wie schließt man eigentlich den Post?

              Gar nicht. Es könnte sich ja herausstellen, dass du noch eine Rückfrage hast, oder dass jemand was falsch oder nicht ausreichend genug erklärt hat oder irgendjemand anderes was zum Thema zu sagen hat. Der Thread wandert automatisch ins Archiv, wenn keiner mehr Interesse zeigt. Das passiert nach einer Untätigkeit von ein paar Tagen - abhängig vom gesamten Postingaufkommen hier im Forum.

              Lo!