phpMyadmin: suchen und ersetzen in ders_user Tabelle

Hallo Kollegen,

wir haben eine Altlast aus der Shopmigration zu SW, die uns immer wieder Probleme bereitet:

in der s_user Tabelle in der DB wurden beim Wert „salutation“ „Herr“ und „Frau“ importiert. SW erwartet jedoch ms und mr.

Wenn solche Kunden ihr Passwort ändern wollen, kommt es zur Fehlermeldung.

Siehe:  https://forum.shopware.com/discussion/42204/geloest-shopware-bug-passwort-vergessen-passwort-zuruecksetzen-funktioniert-nicht

Wir können allerdings nicht tausende Einträge manuell ändern!

Ich habe betreffend phpmyadmin ein wenig recherchiert und würde folgenden Code verwenden:

UPDATE s_user SET salutation = REPLACE(salutation, “Herr”, “mr”)

Frage an die Experten:

Stimmt das so?

Danke und Grüße
Heiko

Hey,

Ich bin kein Experte aber das SQL sieht valide aus, hab das einfach mal an einem Testdatensatz von Kunden ausprobiert. Das klappt wohl. :slight_smile:

1 „Gefällt mir“

UPDATE s_user SET salutation=‘mr’ WHERE salutation=‘Herr’; wenn Herr zu mr werden soll
oder
UPDATE s_user SET salutation=‘Herr’ WHERE salutation=‘mr’; wenn mr zu Herr werden soll

https://www.w3schools.com/sql/sql_update.asp

1 „Gefällt mir“

Oder so  Sticking-out-tongue

Erste Variante führt auf allen Datensätzen die Replace-Aktion durch und schreibt den Wert - egal ob unverändert oder nicht - in die Datenbank zurück - für alle Datensätze.
Zweite Variante schreibt ohne Replace nur Werte in die Datensätze, die betroffen sind. Da könnte man überlegen, welche Variante bei großen Tabellen schneller ist  Wink

1 „Gefällt mir“

Hab ich auch was gelernt :slight_smile:

Geht natürlich nur so, wenn - wie in diesem Fall - die ganze Zeichenkette ausgetauscht wird. Wenn nur ein kleiner Teil in der ganzen Zeichenkette ausgetauscht werden soll, ist der erste Weg ein Ansatz - sollte aber mit einer WHERE und LIKE Klausel auf betroffene Datensätze eingeschränkt werden - der Performance wegen.

UPDATE s_user SET salutation = REPLACE(salutation, „Herr“, „mr“) WHERE salutation LIKE ‚%Herr%‘;
Aber beachten: Replace und LIKE %Herr% greift alles, was Herr hat - also (egal ob mit oder ohne LIKE) auch aus Herrschaft würde mrschaft werden, aus Herrin msin Wink

Wenn Du sowohl Frau als auch Herr austauschen willst, könnte es so gehen - wenn REPLACE verschachtelt werden kann *Schulter zuck*
UPDATE s_user SET salutation = REPLACE(REPLACE(salutation , „Herr“, „mr“),„Frau“,„ms“) WHERE salutation IN(„Herr“,„Frau“);