Linuchs: INSERT ... ON DUPLICATE KEY UPDATE

Moin,

für meinen Mittagstisch kann man ein Wochen-Formular ausfüllen. Sieben Tage mal zwei Mahlzeiten macht 14 Datensätze auf einen Streich.

Unique Key ist der Gastronom, das Datum und eine laufende Nummer pro Datum.

Mit INSERT füge ich die Datensätze ein. Aber es ist kein Fehler, wenn ein vorhandener Datensatz erneut kommt - Dann INSERT ... ON DUPLICATE KEY UPDATE

Nach jedem der 14 möglichen SQL-Kommandos kann man mysql_affected_rows abfragen und aufaddieren. Aber wie kann ich unterscheiden, ob der Satz neu angelegt oder geändert wurde?

Ich möchte anzeigen: xx Datensätze neu erfasst und yy geändert

Linuchs

  1. Tach!

    Nach jedem der 14 möglichen SQL-Kommandos kann man mysql_affected_rows abfragen und aufaddieren. Aber wie kann ich unterscheiden, ob der Satz neu angelegt oder geändert wurde?

    With ON DUPLICATE KEY UPDATE, the affected-rows value per row is 1 if the row is inserted as a new row, 2 if an existing row is updated, and 0 if an existing row is set to its current values.

    dedlfix.

    1. Hallo dedlfix,

      meine Antwort war verschwunden, also noch einmal.

      With ON DUPLICATE KEY UPDATE, the affected-rows value per row is 1 if the row is inserted as a new row, 2 if an existing row is updated, and 0 if an existing row is set to its current values.

      Auf der Seite habe ich nach "mysql_affected_rows" gesucht, kein Treffer. Komisch, dass das wichtigste Keywort fehlt.

      Habe ich mal schnell eingebaut, sieht gut aus. Muss ich aber noch gründlicher testen.

      Es gilt auch ein gleichbleibender Satz als verändert, wenn ich das Feld zeit_aen auf time() setze. Tue ich das nicht, wird die Zeit trotz Änderung nicht festgehalten.

      Ich unterscheide zwischen zeit_aen = time() bei manueller Änderung und last_modified (timestamp), wenn nur der counter beim Aufruf hochgesetzt wird.

      Linuchs

      1. Hallo

        With ON DUPLICATE KEY UPDATE, the affected-rows value per row is 1 if the row is inserted as a new row, 2 if an existing row is updated, and 0 if an existing row is set to its current values.

        Auf der Seite habe ich nach "mysql_affected_rows" gesucht, kein Treffer. Komisch, dass das wichtigste Keywort fehlt.

        Du suchst den Namen einer PHP-Funktion in der MySQL-Doku. Warum sollte es den dort geben?

        Es gilt auch ein gleichbleibender Satz als verändert, wenn ich das Feld zeit_aen auf time() setze.

        Bleibt denn ein Datensatz „gleich“, wenn sich ein Feld (hier „zeit_aen“) verändert?

        Tschö, Auge

        --
        Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
        Toller Dampf voraus von Terry Pratchett