Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Datensatz (record) mit neuer ID duplizieren (kopieren, klonen)

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von ekiam14, 15 April 2014.

  1. ekiam14

    ekiam14 Neuer Benutzer

    Hallo Zusammen,

    Ich habe das große G**** bereits seit Tagen befragt und einiges ausprobiert

    Ich möchte eine genaue Kopie eines in der Datenbank angelegten Satzes (record).

    Ich hatte mir vorgestellt das ich über eine Masterseite auf eine Detailseite gehe.
    Nachdem die Detailseite angezeigt ist möchte ich mit einem Button (z.B. KOPIEREN) den genauen Datensatz in die Datenbank abspeichern.
    Ich lese aus einer MYSQL-Tabelle einen Datensatz aus und schreibe diesen in ein ARRAY.
    Suche anschließend den letzten Datensatz ($sql2 = "SELECT * FROM personen ORDER BY personen.ID DESC LIMIT 1"; )
    Möchte jetzt zwei Datenfelder ändern und den Datensatz in die DB zurückschreiben (ID habe ich um 1 erhöht)
    Die ID = Auto-Increment definiert.
    Aber es will einfach nicht funktionieren.

    Kann mir bitte jemand anhand eines Beispiels erklären wie man so etwas hinbekommt.

    Vielen Dank im voraus
    ekiam14
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Bis hierhin geht das so (inkl. des Hochzählens des PK):
    Also, Du hast:

    Code:
    test=# create table foo (s serial primary key, val text);
    CREATE TABLE
    test=*# insert into foo (val) select md5(s::text) from generate_Series(1,5) s;
    INSERT 0 5
    test=*# select * from foo;
     s |  val
    ---+----------------------------------
     1 | c4ca4238a0b923820dcc509a6f75849b
     2 | c81e728d9d4c2f636f067f89cc14862c
     3 | eccbc87e4b5ce2fe28308fd9f2a7baf3
     4 | a87ff679a2f3e71d9181a67b7542122c
     5 | e4da3b7fbbce2345d7772b0674a318d5
    (5 rows)
    
    
    Und nun kopieren Datensatz mit s=3:

    Code:
    test=*# insert into foo(val) select val from foo where s = 3;
    INSERT 0 1
    test=*# select * from foo;
     s |  val
    ---+----------------------------------
     1 | c4ca4238a0b923820dcc509a6f75849b
     2 | c81e728d9d4c2f636f067f89cc14862c
     3 | eccbc87e4b5ce2fe28308fd9f2a7baf3
     4 | a87ff679a2f3e71d9181a67b7542122c
     5 | e4da3b7fbbce2345d7772b0674a318d5
     6 | eccbc87e4b5ce2fe28308fd9f2a7baf3
    (6 rows)
    

    PostgreSQL, sollte prinzipiell ähnlich mit MySQL gehen (also das Insert)
     
  3. ukulele

    ukulele Datenbank-Guru

    Eine Fehlermedlung oder irgendwas das besagt was nicht funktionieren will wäre schön. Ist Auto Increment nicht dafür da, automatisch IDs zu vergeben? Warum erhöhst du dann die ID um 1 (was im Falle eines Datensatzes mit ID 3 wie im Beispiel von akretschmer schonmal falsch wäre) und versuchst diese mit in die Tabelle zu schreiben?
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Er sucht ja dazu schon den 'letzten' Datensatz raus. Ist natürlich 'fail by design' das alles.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden