Datensätze in MySQL kopieren und beim Einfügen verändern
Hallo,
ich habe in meinem Joomla CMS eine MySQL Datenbank. Ich benutze HeidiSQL um darauf zuzugreifen. Die Tabelle ist z.B. so aufgebaut:
ID NAME ALIAS APPID
1 VW Golf vw_golf 3
2 Opel Astra op_astra 2
3 Renault Clio re_clio 1
4 Seat Ibiza se_ibiza 4
Datensätze: 441
Nun möchte ich folgendes erreichen:
Ich möchte nicht nur alle Datensätze mit der APPID 3 kopieren sondern beim Einfügen soll MySQL die APPID in 6 abändern und hinter jedem ALIAS _copy dranhängen.
Ist dies überhaupt möglich und wenn ja, wie?
Danke
ich habe in meinem Joomla CMS eine MySQL Datenbank. Ich benutze HeidiSQL um darauf zuzugreifen. Die Tabelle ist z.B. so aufgebaut:
ID NAME ALIAS APPID
1 VW Golf vw_golf 3
2 Opel Astra op_astra 2
3 Renault Clio re_clio 1
4 Seat Ibiza se_ibiza 4
Datensätze: 441
Nun möchte ich folgendes erreichen:
Ich möchte nicht nur alle Datensätze mit der APPID 3 kopieren sondern beim Einfügen soll MySQL die APPID in 6 abändern und hinter jedem ALIAS _copy dranhängen.
Ist dies überhaupt möglich und wenn ja, wie?
Danke
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 270983
Url: https://administrator.de/forum/datensaetze-in-mysql-kopieren-und-beim-einfuegen-veraendern-270983.html
Ausgedruckt am: 23.12.2024 um 06:12 Uhr
11 Kommentare
Neuester Kommentar
Moin
Ja es ist möglich
Dazu kannst du zb ein PHP Script machen das erstmal deine Aktuelle DB Ausliest und die Daten Aufbereitet und danach in die Neue DB Speichert.
Dazu ggfs noch vor dem Eintragen Prüfen ob der Eintrag schon drin ist um Doppelte EInträge zu verhindern.
Es währe auch möglich eine neue Spalte Names Copy zu erstellen und dort einfach eine 1 Einzutragen um dies zu erkennen.
Würde je nach Verwendung das Suchen/Beareiten mit dem _copy erleichtern zu Handhaben da in der Ausgabe dann per Script dies Besser Darstellen könntest...
Aber auch ein Dump zu machen und per Notepad zu Editieren oder per Bash... möglichkeiten gibts viele dazu...
Ja es ist möglich
Dazu kannst du zb ein PHP Script machen das erstmal deine Aktuelle DB Ausliest und die Daten Aufbereitet und danach in die Neue DB Speichert.
Dazu ggfs noch vor dem Eintragen Prüfen ob der Eintrag schon drin ist um Doppelte EInträge zu verhindern.
Es währe auch möglich eine neue Spalte Names Copy zu erstellen und dort einfach eine 1 Einzutragen um dies zu erkennen.
Würde je nach Verwendung das Suchen/Beareiten mit dem _copy erleichtern zu Handhaben da in der Ausgabe dann per Script dies Besser Darstellen könntest...
Aber auch ein Dump zu machen und per Notepad zu Editieren oder per Bash... möglichkeiten gibts viele dazu...
Moin winIT3264,
ich bin nicht sicher. ob ich dein Problem verstehe - in der "immens grossen Datenbank" kann es doch in der gezeigten Tabelle nur eine Handvoll Datensätze mit der AppID 3 geben??
Egal, wenn die ID eine automatisch vergebene ID ist, dann:
[Edit]
Wenn das Feld "ID" kein automatisch generierter Wert ist und die Tabelle roundabout 450 Datensätze hat:
[/Edit]
Grüße
Biber
ich bin nicht sicher. ob ich dein Problem verstehe - in der "immens grossen Datenbank" kann es doch in der gezeigten Tabelle nur eine Handvoll Datensätze mit der AppID 3 geben??
Egal, wenn die ID eine automatisch vergebene ID ist, dann:
INSERT INTO deineTabelle( NAME, ALIAS, APPID)
Select t.Name, t.Alias || '_copy' , 6 from deineTabelle t
where AppID = 3;
[Edit]
Wenn das Feld "ID" kein automatisch generierter Wert ist und die Tabelle roundabout 450 Datensätze hat:
INSERT INTO deineTabelle( ID, NAME, ALIAS, APPID)
Select t.Id+450, t.Name, t.Alias || '_copy' , 6 from deineTabelle t
where AppID = 3;
Grüße
Biber
Also 441 Datensätze würd ich jetzt nicht als immens groß Bezeichnen.
Hab da ne andere DB die hat >4 Millonen Einträge wo ich eher groß sagen würde...
Aber HeidiSQL kenn ich jetzt nicht kann daher nix zu deren Aufbau sagen.
Würde aber annehmen das es Ähnlich wie MySQL ist...
Aber ein Backup sollte vor Veränderungen immer gemacht werden sowie Regelmäßige durchgefürt werden...
Hab da ne andere DB die hat >4 Millonen Einträge wo ich eher groß sagen würde...
Aber HeidiSQL kenn ich jetzt nicht kann daher nix zu deren Aufbau sagen.
Würde aber annehmen das es Ähnlich wie MySQL ist...
Aber ein Backup sollte vor Veränderungen immer gemacht werden sowie Regelmäßige durchgefürt werden...
Moin winIT3264,
ähhm... wer von uns beiden kennt denn "die anderen Felder"?
Ich habe die 4 oder 5 Beispielfelder genommen, die du genannt hattest.
Weitere kannst du doch analog in die Feldliste in der ersten Zeile ("INSERT into deinetabelle (feldliste)") und in die Feldliste im "SELECT feldliste FROM.." in der zweiten Zeile einbauen.
Alternativ gib doch bitte die "echte" Struktur der Tabelle bekannt, dann können wir das hier zusammentippseln.
Grüße
Biber
ähhm... wer von uns beiden kennt denn "die anderen Felder"?
Ich habe die 4 oder 5 Beispielfelder genommen, die du genannt hattest.
Weitere kannst du doch analog in die Feldliste in der ersten Zeile ("INSERT into deinetabelle (feldliste)") und in die Feldliste im "SELECT feldliste FROM.." in der zweiten Zeile einbauen.
Alternativ gib doch bitte die "echte" Struktur der Tabelle bekannt, dann können wir das hier zusammentippseln.
Grüße
Biber
Moin winIT3264,
na ja, wie geschrieben, einfach nach Schema F ergänzen:
P.S.
Im SELECT-Teil habe ich ja den Aliasnamen t verwendet, um Probleme wegen evtl reservierter Feldnamen wie ALIAS (oder jetzt dazugekommen TYPE, ACCESS, ..) zu vermeiden.
Kann sein, dass du reservierte Feldnamen in der oberen Feldliste in Anführungszeichen setzen musst - da weiss ich nicht, wie empfindlich mySQL ist.
Grüße
Biber
na ja, wie geschrieben, einfach nach Schema F ergänzen:
INSERT INTO deineTabelle( NAME, ALIAS, APPID,
type, created, modified, modified_by, publish_up, publish_down, priority,
hits, state, access, created_by, created_by_alias, searchable, elements, params
)
SELECT t.Name, CONCAT(t.Alias , '_copy') , 6 ,
t.type, t.created, t.modified, t.modified_by, t.publish_up, t.publish_down, t.priority,
t.hits, t.state, t.access, t.created_by, t.created_by_alias, t.searchable, t.elements, t.params
FROM deineTabelle t
WHERE AppID = 3;
P.S.
Im SELECT-Teil habe ich ja den Aliasnamen t verwendet, um Probleme wegen evtl reservierter Feldnamen wie ALIAS (oder jetzt dazugekommen TYPE, ACCESS, ..) zu vermeiden.
Kann sein, dass du reservierte Feldnamen in der oberen Feldliste in Anführungszeichen setzen musst - da weiss ich nicht, wie empfindlich mySQL ist.
Grüße
Biber