Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Layoutprobleme? - Styleswitcher!

Antwort
 
Themen-Optionen
Alt 05.03.2008, 10:03 Nach oben    #1
Sclot
Sven Schmalle
 
Benutzerbild von Sclot
 
Registriert seit: 18.08.2005
Ort: Bremen
Beiträge: 143
Standard [gelöst] Datensatz kopieren

Hätte nie gedacht das das so ein Problem ist.

Ich möchte einfach nur einen Datensatz in einer Mysql Tabelle kopieren.
Dies möchte ich direkt in Mysql machen, da es über PHP etwas aufwendiger ist.
Die Tabelle hat über 60 Felder...

Code:
INSERT INTO shipment (*) SELECT * FROM shipment WHERE id=102
^^ Das wäre das sinnigste für diese Aufgabe.
Einfach einen neuen Datensatz anlegen mit dem gewünschten alten Datensatz als Inhalt.

Das Problem dabei ist nur, das id ein auto_inc Feld ist.
Beim ausführen kommt dann logischerweise der Fehler, das die ID dann doppelt vergeben werden würde (ist ja auch eine Kopie des alten Datensatzes).

Eigentlich müsste ich jetzt nur wissen, wie man dem sagen kann, das er die id des alten Datensatzes nicht beachten soll und einfach neu vergibt.

Den Datensatz in eine "temporäre Tabelle" zwischen zu speichern, wäre eine Möglichkeit dieses Problem zu umgehen, allerdings ändert sich die Struktur der Tabelle sehr oft, dann müssten die Änderungen an der Struktur der temporären Tabelle auch geändert werden, was wiederum Aufwand und Fehlerquellen bedeutet :/

System ist ein Debian
Mysql Version ist (leider) 4.0.20

Danke für Antworten

Geändert von Sclot (05.03.2008 um 11:15 Uhr).
Sclot ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.03.2008, 10:21 Nach oben    #2
mepeisen
Martin Eisengardt
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 353
Standard

Das Select * ist dann das Problem, denn eigentlich müsstest du das Auto_Inc_feld mit Null füllen. Also angenommen es ist das erste Feld der Tabelle, dann etwa so:
Code:
INSERT INTO ... SELECT NULL, SpalteA, SpalteB, SpalteC...
Und damit hättest du wieder ein Problem mit der Tabellenstruktur. Was spricht dagegen, erst einmal die Namen aller Spalten herauszufinden, und dann den Insert-Select generisch aufzubauen?
__________________
Open Sourcing the Online Gaming Universe
PHP/SQL/Java/C++/Assembler.
Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html
mepeisen ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.03.2008, 10:23 Nach oben    #3
Sclot
Sven Schmalle
 
Benutzerbild von Sclot
 
Registriert seit: 18.08.2005
Ort: Bremen
Beiträge: 143
Standard

Das wäre in der tat ein möglicher Lösungsansatz.
Werd ich mal versuchen, danke
Sclot ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.03.2008, 11:13 Nach oben    #4
Sclot
Sven Schmalle
 
Benutzerbild von Sclot
 
Registriert seit: 18.08.2005
Ort: Bremen
Beiträge: 143
Standard

So...
Ich war mal so frei und hab da eine kleine Funktion draus gebaut:

PHP-Code:
function spalten_ohne_id($tabelle)
{
    
$spalten_string "";
    
$result_spalten mysql_query("SHOW COLUMNS FROM ".$tabelle."");

    while (
$liste_spalten mysql_fetch_array($result_spalten)) 
    {
        if(
$liste_spalten[0]!="ID")
        {
            
$spalten_string.=$liste_spalten[0].", ";
        }
    }        

    
$spalten_string substr($spalten_string0,strlen($spalten_string)-2);
    return 
$spalten_string;

Kann dann z.B. mit:

PHP-Code:
 echo spalten_ohne_id("shipment"); 
aufgerufen werden.

Für meine Tabelle sind das dann jetzt 0.0037620068 Sekunden, die das Script länger zum werkeln braucht.

In meinem Fall würde die Anwendung der Funktion jetzt wie folgt aussehen:
PHP-Code:
$spalten spalten_ohne_id("shipment");
mysql_query("INSERT INTO shipment SELECT NULL,$spalten FROM shipment WHERE ID=2"); 

Danke nochmal für DIESEN Lösungsansatz.

Geändert von Sclot (05.03.2008 um 11:51 Uhr).
Sclot ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.03.2008, 13:19 Nach oben    #5
mepeisen
Martin Eisengardt
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 353
Standard

Ist nicht ganz ideal, wenn ID nicht die erste Spalte ist oder sie anders heisst, aber im Normalfall ist sie das und dann klappts auch. Vielleicht noch:
INSERT INTO shipment (ID, $spalten) SELECT
usw.
__________________
Open Sourcing the Online Gaming Universe
PHP/SQL/Java/C++/Assembler.
Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html
mepeisen ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

« MySQL: Frage zu Stored Procedures | Installation MySQL-python? »

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

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge anzufügen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
WinXP: Kopieren mit Markieren und Mausrad think Gesuche 1 22.07.2007 14:37
SQL Abfrage klappt nicht mit mehr als einem Datensatz Jan PHP-Programmierung 11 29.03.2007 20:05
Datensatz löschen andy74 Datenbanken 40 17.01.2006 13:55
Überprüfen ob Datensatz vorhanden Quakes Datenbanken 2 25.03.2005 13:24
2Dimensionales Array, 2mal denselben Datensatz zonk Allgemeine Java-Programmierung 1 20.10.2004 07:02


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:38 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.6.7, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.0.0) und vBSEO.

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