heinetz: MySQL alle Verisonen | UPDATE

Hallo Forum,

Ich habe 10 Datensätze in meiner MySQL-Tabelle und ein
Array aus 10 Elementen in denen 10 Werte stehen. Ich
durchlaufe das Array mit einer Schleife, bilde UPDATE-
Statements mit den Werten aus dem Array in setze die
Statements ab. Jetzt habe ich die 10 Datensätze verändert.

Soweit so gut.

Jetzt habe ich aber plötzlich 11 Elemente in meinem Array,
durchlaufe es genauso, bilde 11 UPDATE-Statements (Um 11
Datensätze zu verändern), aber es gibt nur 10 Datensätze
ich müsste also erstmal einen weiteren Datensatz anlegen.

Mein Array weiss nichts davon, welcher Datensatz fehlt und
welcher vorhanden ist.

Mir fällt nur folgendes ein:

Statt pro Element nur ein UPDATE zu bilden, könnte ich pro
Element je ein DELTE und ein anschliessendes INSERT bilden.
Damit wäre sicher gestellt, dass der 11 Datensatz angelegt
würde.

Kann man das anders machen ?

danke für Tipps und

beste gruesse,
heinetz

  1. Hi!

    Statt pro Element nur ein UPDATE zu bilden, könnte ich pro Element je ein DELTE und ein anschliessendes INSERT bilden. Damit wäre sicher gestellt, dass der 11 Datensatz angelegt würde. Kann man das anders machen?

    Mit REPLACE beispielsweise.

    Lo!

    1. hi,

      Mit REPLACE beispielsweise.

      danke für den Tipp. Wenn der Datensatz eindeutig indentifizierbar
      wäre, wäre das eine elegante Lösung. Ist er aber leider nicht ;(

      Mein Lösung ist nun ein Timestamp.

      beste gruesse,
      heinetz

      1. Moin!

        Mit REPLACE beispielsweise.

        danke für den Tipp. Wenn der Datensatz eindeutig indentifizierbar
        wäre, wäre das eine elegante Lösung. Ist er aber leider nicht ;(

        Es muss doch aber eine eindeutige Zuordnung von DB-Datensatz zu Array-Datensatz geben, d.h. wenn du einen bestimmten Datensatz aus dem Array hast, musst du wissen, welchen zugehörigen Datensatz in der DB du aktualisieren willst.

        Mein Lösung ist nun ein Timestamp.

        Klingt nach dem falschen Ansatz.

        REPLACE
        ist die Brachialmethode. Hat auch so ihre Nachteile, beispielsweise was die Wirkung auf auto-increment-Felder angeht.

        INSERT ... ON DUPLICATE KEY UPDATE ... (in MySQL)
        ist deutlich netter. Erfordert allerdings, dass der zu insertierende Key beim INSERT bekannt ist und zu einem Konflikt in der Unique-Spalte führt (also Primärindex oder UNIQUE auf der Spalte).

        Andernfalls kannst du ja aber auch gar nicht feststellen, welcher Datensatz überhaupt schon existiert, sondern müsstest alle Datensätze im Array als neu behandeln.

        - Sven Rautenberg