+ Antworten
Ergebnis 1 bis 3 von 3

Thema: Datensatz dublizieren

  1. #1
    TP-Junior daigo macht alles soweit korrekt
    Registriert seit
    Mar 2009
    Beiträge
    10

    Datensatz dublizieren

    Schönen guten Morgen allerseits!


    Ich habe den Fall, dass man einen MySQL-Datensatz über eine Weboberfläche dublizieren können muss.

    Mein bisheriger Ansatz sieht folgendermaßen aus:
    PHP-Code:
    <?php
        
    global $IN$DB$REGX;
        
        
    $id =    $DB->escape_str($REGX->xss_clean($IN->GBL('id''POST')));
        
    $table $DB->escape_str($REGX->xss_clean($IN->GBL('table''POST')));

        
    $query $DB->query("INSERT INTO {$table}
            SELECT * FROM {$table} AS to_copy
            WHERE to_copy.id = {$id}
            ON duplicate key
            UPDATE id = id + 1"
    );    

        
    $json['entry_id'] = $DB->insert_id;


        if (
    $query)
        {
            
    $json['status'] = 'copied';
        }
        else
        {
            
    $json['status'] = 'error';
            
    $json['sql'] = $sql;
        }
        
                    
        echo 
    utf8_encode(json_encode($json));
    ?>
    Daraufhin folgt aber folgender MySQL Error:

    Code:
    Error Number: 1052
    Description: Unknown column 'id' in 'field list'
    Query: INSERT INTO foobar
    	SELECT * FROM foobar AS to_copy
    	WHERE to_copy.id = 393
    	ON duplicate key
    	UPDATE id = id + 1

    Ich könnte zwar statt des "SELECT *" ein "SELECT field_1, field_2, ... field_n" nehmen und dabei das Feld "id" aussparen, aber es wäre schon schneller + einfacher, würde man alles selektieren, da ich circa 20 verschiedene Tabellenstrukturen habe und so dann erstmal durch eine "switch/case"-Geschichte laufen müsste um den entsprechenden Query zu nutzen, da jede dieser 20 Tabellen eine andere Struktur besitzt.

    Daher meine Frage: Wie bekomme ich den "SELECT *"-Query vernünftig zum laufen, sodass wirklich die komplette Zeile dubliziert wird (Ausnahme: Das "id"-Feld) ?


    Vielen Dank im voraus für eure Tipps!

    (PS.: Ja, ich bin mir über die Tatsache von redundanten Daten et cetera bewusst, brauche diese Funktionalität aber )

  2. #2
    TP-Specialist phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts Avatar von phpBuddy
    Registriert seit
    Aug 2004
    Ort
    Kaiserslautern
    Beiträge
    4.678
    Hallo,

    ich denke nicht das das geht. Du musst bei solchen Aktionen ja neben dem Primary Key auch Unique, usw. berücksichtigen können.
    Du könntest aber die Formulare auch dynamisch generieren lassen, indem Du mit SHOW COLUMNS die Felder ermittelst, in $row['Key'] steht drin, ob es sich bei dem Feld um ein Primary oder Unique handelt, das könntest Du dann mit NULL füllen. Das würde dir zumindest das manuelle Erstellen bei so vielen Tabellen ersparen.

    Aber warte mal noch ab, vielleicht hat ja jemand anderes noch eine Idee, wie es "einfacher" geht.

  3. #3
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    so gehts auch
    Code:
    INSERT INTO db.tabelle (
    feld1,
    feld2,
    feld3
    )
    SELECT feld1, feld2, feld3 FROM db.tabelle WHERE id = 1
    wobei bei der Aufzählung der Felder der Key ausgespart ist.


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


+ Antworten

Ähnliche Themen

  1. dublizieren rückgängig machen?
    Von Kommandant im Forum Fireworks
    Antworten: 3
    Letzter Beitrag: 17.10.2006, 18:41
  2. [illustrator cs] objekt dublizieren
    Von 12go im Forum Layout- & Vektor-Programme
    Antworten: 6
    Letzter Beitrag: 15.09.2004, 09:41
  3. Datensatz markieren
    Von Pumukl im Forum Traum-Dynamik
    Antworten: 12
    Letzter Beitrag: 26.08.2004, 15:46
  4. Datensatz deaktivieren
    Von Simonx im Forum Traum-Dynamik
    Antworten: 5
    Letzter Beitrag: 23.03.2003, 17:43
  5. datensatz sperren
    Von jph im Forum Traum-Dynamik
    Antworten: 2
    Letzter Beitrag: 07.01.2003, 21:49

Stichworte

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51