Shopdatenbank gewisse Kunden Felder durch Backup überschreiben

Walkabout

Benutzer
Beiträge
7
Hallo zusammen,

ich habe bei meinem Modified Shop mehrere Updates gemacht. Danach wurden alle Felder in der Kundendatenbank nach den Umlauten ä ö ü abgeschnitten.

Nun möchte ich in der Shopdatenbank bei der Tabelle "customers" die Felder Name, Vorname, Strasse und Ort mit den entsprechenden Daten vom Backup überschreiben.

Wie mache ich das am besten? Habe leider nicht so viel SQL Erfahrung (PHPMyAdmin).

Ich habe bereits versucht die ganze Tabelle "customers" zu löschen und diese aus dem Backup wieder zu importieren. Danach konnte ich mich nicht mehr einloggen. ev. wurden da Beziehungen oder so gelöscht... ich weiss es nicht genau.

Wäre froh, wenn mir da ein Datenbankprofi weiterhelfen könnte.

Gruss Stefan
 
Werbung:
Das einfachste ist ein komplettes Backup einzuspielen.
Und das kleinere Problem ist anschließend mglw. fehlende Neudaten aus dem defekten System so gut wie möglich zu ergänzen.
Mit dem Vorgehen würdest Du auch Deine "Änderungen" komplett und automatisch und vollständig rückgängig machen.

Wenn Du kein Point In Time Backup hast, musst Du das Backup separat in einer anderen DB einspielen,
dann die Unterschiede feststellen und
bei Differenzen datensatzweise den Altzustand per Update eintragen.
Das geht ziemlich sicher nur, wenn Deine Datenmodell-Änderungen dem nicht im Wege stehen. (s.o.)

Da ich nicht weiß, was ein Modified Shop ist und auch kein mySQL Spezialist bin, kann ich dazu so allgemein nichts weiter sagen.
 
Vielen Dank für Deine Antwort.

Der Shop ist momentan Offline, somit sind keine neuen Kunden vorhanden. Es bestehen genau 1350 Datensätze im Backup und im Live Shop.

So wie ich das verstehe sollte ich unter dem gleichen Datenbankbenutzer eine neue Datenbank anlegen und dort die Daten vom Backup importieren wo die Kundendaten noch in Ordnung sind.

Danach brauche ich eine Abfrage welche die Kunden per Kunden ID (Primärschlüssel) Satz für Satz abgleicht und feststellt ob die Daten identisch sind. Wenn nicht, dann sollten die Datenfelder (Name, Vorname, Strasse und Ort) aus dem Backup im "Live System" erstezt werden"

Kann mir jemand helfen diese Abfrage zu erstellen... habe da wenig Erfahrungen...
 
PHP:
UPDATE customers_original
SET customers_original.customers_firstname = 'customers_backup.customers_firstname'
WHERE customers_original.customers_id = 'customers_backup.customers_id'

Würde sowas funktionieren, wenn ich das für jedes gewünschte Feld wiederhole?
 
Zuletzt bearbeitet:
Nein, Syntax ist falsch (vielleicht mit MySQL, was ja selbst viel falsch macht ...)

Code:
postgres=# \h update
Command:     UPDATE
Description: update rows of a table
Syntax:
[ WITH [ RECURSIVE ] with_query [, ...] ]
UPDATE [ ONLY ] table_name [ * ] [ [ AS ] alias ]
    SET { column_name = { expression | DEFAULT } |
          ( column_name [, ...] ) = [ ROW ] ( { expression | DEFAULT } [, ...] ) |
          ( column_name [, ...] ) = ( sub-SELECT )
        } [, ...]
    [ FROM from_item [, ...] ]
    [ WHERE condition | WHERE CURRENT OF cursor_name ]
    [ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]

URL: https://www.postgresql.org/docs/15/sql-update.html

postgres=#

Du kannst auch mehrere Felder in 1 Update updaten...
 
sowas könnte dir helfen

Code:
UPDATE customers_original corg
SET corg.firstname = cback.firstname,
       corg.lastname = cback.lastname
INNER JOIN customers_backup cback ON coirg.id = cback.id

Sowas würde alle firstname(s) und lastname(s) in der original Tabelle ersetzen.

ACHTUNG:

- Beim INNER JOIN steh am ende 2 x id "ON coirg.id = cback.id:". Dort muss den Name der Spalte angegeben werden wo die Kunden id drin ist.
- die anzahl der Felder die überschrieben werden kann angepasst werden
- die Tabellennamen müssen angepasst werden

Eine Datensicherung vorab kann immer helfen !!!!!


Gruß

Bernd
 
Sorry Schreibfehler, Finger wieder zu schnell

Code:
UPDATE customers_original corg
SET corg.firstname = cback.firstname,
       corg.lastname = cback.lastname
INNER JOIN customers_backup cback ON coirg.id = cback.id
 
Hallo Bernd,

erstmal vielen Dank!

Leider funktioniert es in der Testdatenbank noch nicht wie gewünscht. Ich habe folgendes eingegeben:

SQL:
UPDATE customers_original
SET customers_original.customers_lastname = customers_backup.customers_lastname
INNER JOIN customers_backup ON customers_original.customers_id = customers_backup.customers_id;

Bekomme aber den Fehler: #1064 - Fehler in der SQL-Syntax.
 
Zuletzt bearbeitet:
Super das wars ;-) Danke Dir vielmals für die Hilfe!

Hoffe das Ganze funktioniert auch Datenbankübergreifend, da ich die "Backuptabelle" nicht in die Originaldatenbank importieren möchte.
 
Werbung:
Zurück
Oben