berdn: Datensatz duplizieren

Hallo Forum,

ich will einen Datensatz in einer MySQL Tabelle duplizieren.

Version: 3.23.37

Und habe mir auch schon
http://forum.de.selfhtml.org/archiv/2003/10/59073/#m331879

mal durchgelesen.

Heist das jetzt das ich wirklich erst meinen alten Datensatz auslesen muß, auswerten und dann wieder neu einlesen ....
Geht das nicht eleganter da ich
a.) diverse Datenfelder habe
b.) dies auch noch erweitert werden ...

Halt nur das Feld "ID" müßte angepasst werden da dieses als primaäschlüssel gesetzt ist ... und meine mySQL kenntnisse sind bescheiden.

Wenn ich das jetzt richtig verstanden habe, wäre eine Möglichkeit neue Tabelles anzulegen. Meinen Datensatz in die neue Tabelle zu kopieren.
Dann Diesen Datensatz in meine alte Tabelle zurück zu holen und damit zu duplizieren.

Die neue Tabelle zu löschen.

... naja, ... hört sich nicht so prickelnd an.

Ich mach jetzt erstmal Feierabend.

Liebe Grüße,

Bernd

  1. Hello,

    Version: 3.23.37

    Bisher habe ich das erfolgreich nur bei 4.0.18 geschafft.

    Der Self Join bei Insert ist sonst immer verboten.

    Kann sein, dass neuere Versionen (4.0.18 war bisher die neueste, die ich testen konnte)
    das alle können, wenn man nur einen einzigen Datensatz aus dem Self Select wieder einfügt.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. Hallo Tom,

      schade ....

      Mal eine Überlegung, (tut mir Leid absoluter Newbe):

      • ich müßte mir doch alle Feldnamen einer Tabelle in einen Array ausgeben lassen können
      • Die Ausgabe eines Datensatzes wird doch auch in einen Array geschrieben
      • Also müßte ich doch einen relative einfach Workaround ertsellen können ?

      Also
      1.) Da ich noch nicht weiß wieviel Tabellenfelder ich habe werde, im Moment sind es ca. 40, lasse ich mir ersteinmal alle Feldnamen ausgeben.
      "Lösche" dann das Feld "id" (Primärschlüssel).
      2.) Erstelle mir aus dieser "Liste" meine erste Datenbankabfrage
      3.) Speichere das Ergebnis zwischen
      4.) erstelle einen neuen Datensatz
      5.) Date diesen Datensatz mit meinen zwischengespeicherten Wert ab.

      Als Abfrage Sprache verwende ich PHP 4.x

      Frage: Ist dieser Weg möglich ?
      Frage: Hat hier jemand den ein oder anderen Codeschnipsel für mich, speziell wie ich die Feldnamen in einen Array einlesen könnte?

      Ein jeden einen schönen Morgen,

      Bernd

  2. hi,

    Halt nur das Feld "ID" müßte angepasst werden da dieses als primaäschlüssel gesetzt ist ...

    um was für eine art der anpassung geht es denn?

    bring doch bitte mal ein beispiel, alte ID -> neue ID.

    wenn es da zu keinen überschneidungen kommt, würde m.E. auch ein einfaches UPDATE ausreichen, welches die ID neu setzt.

    gruß,
    wahsaga

    --
    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
    1. yo,

      wenn es da zu keinen überschneidungen kommt, würde m.E. auch ein einfaches UPDATE ausreichen, welches die ID neu setzt.

      das sollte man sich aber genau überlegen, erst recht, weil mysql fremdschlüssel nicht so recht mit in das dbms intergriert hat. zum anderen könnte das eventuelle mit autoincrementwerten in konflikt kommen.

      Ilja

      1. hi,

        das sollte man sich aber genau überlegen, erst recht, weil mysql fremdschlüssel nicht so recht mit in das dbms intergriert hat.

        sicher, aber auf diese beziehungen muss er ja vermutlich sowieso selber achten, auch wenn er es über einfügen neuer datensätze und anschließendes löschen der alten macht.

        zum anderen könnte das eventuelle mit autoincrementwerten in konflikt kommen.

        ja, ein wenig aufpassen muss man das schon.
        wie gesagt, überschneidungen beachten, etc.

        gruß,
        wahsaga

        --
        "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
        1. yo,

          ja, ein wenig aufpassen muss man das schon.
          wie gesagt, überschneidungen beachten, etc.

          die frage ist vielmehr, kann ich es nicht anders lösen, als einen pk zu ändern. und wenn das geht, dann würde ich lieber diesen weg einschlagen. dann ist man auf einer sicheren seite.

          Ilja

      2. Hallo Forum,

        also meien Tabelle ist furchtbar einfach

        id|content1|content1||content....|

        "id" steht auf auto_increment. der Rest sind einfache Textfelder.

        d.h. ich habe einen D-Satz mit der "id" z.B. 24 und der soll dupliziert werden. d.h. die "id" müßte dann die nächst freie sein also z.B. "99".

        Oder ich lege einen neuen Datensatz an und dupliziere jeden Feldinhalt mit ausnahme von "id".

        Entschuldigung wenn ich mich unverstaändlich und fachlich bestimmt falsch ausdrücke.

        Bernd

        PS: Im Moment suche ich mir mal eine funktion die mir alle Feldnamen ausgibt, vieleicht komme ich ja damit weiter.
        PS: Und schonmal vielen danke für Eure Hilfe

        1. Hallo Forum,

          hab mir jetzt nochmal selfPHP angeschaut dort die mySQL-Befehle und glaube das mir mit "mysql_field_name" etc. was zusammenbauen kann.

          Wenns klappt stelle ich es nachher mal rein.

          Liebe Grüße,

          Bernd

          PS: Hallo wahsaga, hallo Ilja, ehrlich gesagt ich versteh's nicht was Ihr schreibt. Ist aber nicht schlimm, ... würde mich aber freuen wenn Ihr mir später ein kleines Feedback zu meiner Lösung schreiben würdet.
          Sobald ich sie denn gefunden habe ;-)

  3. Hallo,

    hier ist meine erste Lösung: Scheint zu funktionieren höre sehr gerne Kritik wie ich es besser machen kann ...

    $arrayFieldName = array();
    $arrayFieldContent = array();
    $myCounter = 0;

    $result = mysql_list_fields($dbname, "kognito_CMS",$dbconnect);
      $menge = mysql_num_fields($result);
      for($x=1;$x<$menge;$x++){
       $name = mysql_field_name($result,$x);
       array_push($arrayFieldName,$name);
      }

    $result = mysql_query("SELECT * FROM kognito_CMS WHERE id = 12");
     while ( $row = mysql_fetch_array($result) ) {
      for($x=0;$x<count($arrayFieldName);$x++){
       $tmpFieldname = $arrayFieldName[$myCounter];
         array_push($arrayFieldContent,$row[$tmpFieldname]);
         $myCounter++;
      }
     }

    $tmpStr = join(",",$arrayFieldName);
    $tmpStr = "(".$tmpStr.")";
    $tmpStr2 = join("','",$arrayFieldContent);
    $tmpStr2 = "('".$tmpStr2."')";

    $result = mysql_query("INSERT INTO kognito_CMS $tmpStr VALUES $tmpStr2");