search and replace in mysql
alex_
- datenbank
huhu, ich habe folgendes problem:
ich würde gerne in mehreren spalten einer tabelle teilstrings auffinden und durch andere werte ersetzen.
beispiel:
spalte1|spalte2|spalte3
------------------------
montag |montag |dienstag
abend |morgen |tagsüber
ersetzt werden soll: "tag" durch ""
ergebnis:
spalte1|spalte2|spalte3
------------------------
mon |mon |diens
abend |morgen |süber
aber wie mach ich das ?
danke alex.
Hi,
ich würde gerne in mehreren spalten einer tabelle teilstrings auffinden und durch andere werte ersetzen.
wann immer ein solcher Wunsch vorkommt - und das ist erschreckend häufig - lautet die Schlussfolgerung: Dein DB-Layout sollte überarbeitet werden. Mit an Sicherheit grenzender Wahrscheinlichkeit widerspricht es grundlegenden Prinzipien.
aber wie mach ich das ?
Betrachte jede Spalte für sich allein. In diesem Fall solltest Du nicht "montag" durch "mon" ersetzen, sondern durch die zugehörige Referenz auf die Tabelle, die den Wert enthält.
Cheatah
Hi,
ich würde gerne in mehreren spalten einer tabelle teilstrings auffinden und durch andere werte ersetzen.
wann immer ein solcher Wunsch vorkommt - und das ist erschreckend häufig - lautet die Schlussfolgerung: Dein DB-Layout sollte überarbeitet werden. Mit an Sicherheit grenzender Wahrscheinlichkeit widerspricht es grundlegenden Prinzipien.
aber wie mach ich das ?
Betrachte jede Spalte für sich allein. In diesem Fall solltest Du nicht "montag" durch "mon" ersetzen, sondern durch die zugehörige Referenz auf die Tabelle, die den Wert enthält.
Cheatah
nee, die tabellen sind schon gut strukturiert, das hat uns immerhin mehrere monate konzeption gekostet. ich hab inzwischen auch ne lösung gefunden:
UPDATE $DB.$table SET
ATTR_LIST=REPLACE(ATTR_LIST, '$child_code_id', ''),
ATTR_LIST_TEMPL=REPLACE(ATTR_LIST_TEMPL, '$child_code_id', ''),
ATTR_LIST_TEMPL_TABS=REPLACE(ATTR_LIST_TEMPL_TABS,'$child_code_id', '') WHERE
ATTR_LIST LIKE '%$child_code_id%' OR
ATTR_LIST_TEMPL LIKE '%$child_code_id%' OR
ATTR_LIST_TEMPL_TABS LIKE '%$child_code_id%';
so, falls jemand das mal benötigen sollte...
trotzdem danke .-)
Hi,
nee, die tabellen sind schon gut strukturiert,
nein, das glaube ich nicht. Die Werte sind offenbar multipel genutzte Keys, die Du auslagern möchtest.
das hat uns immerhin mehrere monate konzeption gekostet.
Auch die beste Konzeption schützt nicht vor Fehlern.
ich hab inzwischen auch ne lösung gefunden:
Die WHERE-Clause ist unnötig.
Cheatah
Hi,
nee, die tabellen sind schon gut strukturiert,
nein, das glaube ich nicht. Die Werte sind offenbar multipel genutzte Keys, die Du auslagern möchtest.
gut, ich geh nicht davon aus dass du mir n verbesserungsvorschlag hier machst, aber haste links wo sowas beschrieben wird? ich geh momentan davon aus, daß die struktur gut ist. hätte lieber ne objektorientierte db genommen aber die stand nicht zur verfügung...
das häufige vorkommen der werte ist gewollt und stellt ne vererbung dar.
das hat uns immerhin mehrere monate konzeption gekostet.
Auch die beste Konzeption schützt nicht vor Fehlern.
auch klar, wollte bloss sagen dass wir uns gedanken darüber gemacht haben
ich hab inzwischen auch ne lösung gefunden:
Die WHERE-Clause ist unnötig.
ahh, gut, nehm ich raus .-)
thx
alex
Hi,
nein, das glaube ich nicht. Die Werte sind offenbar multipel genutzte Keys, die Du auslagern möchtest.
gut, ich geh nicht davon aus dass du mir n verbesserungsvorschlag hier machst, aber haste links wo sowas beschrieben wird?
http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)#2._Normalform_.282NF.29
das häufige vorkommen der werte ist gewollt und stellt ne vererbung dar.
Ich gestehe, ich kann mir nicht vorstellen, was damit praktisch gemeint sein soll. Gleiche Werte, die in gleichem Sinne gemeint sind, sind entweder referenziert oder redundant - und letzteres ist ein Problem.
auch klar, wollte bloss sagen dass wir uns gedanken darüber gemacht haben
Das freut mich zwar zu hören, aber davon bin ich sogar ausgegangen :-)
Cheatah
Ich gestehe, ich kann mir nicht vorstellen, was damit praktisch gemeint sein soll. Gleiche Werte, die in gleichem Sinne gemeint sind, sind entweder referenziert oder redundant - und letzteres ist ein Problem.
jap, es wimmelt von redundanz, und das haben wir so gemacht um unnötige durchhangelei zu oberen objekten zu vermeiden. geht leider auf kosten des speichers, aber das war uns lieber. ob es ein fehler war wird sich zeigen, aber ändern kann ich das nicht mehr.
danke für den link...
gruß
yo,
wann immer ein solcher Wunsch vorkommt - und das ist erschreckend häufig - lautet die Schlussfolgerung: Dein DB-Layout sollte überarbeitet werden.
erschreckend wie häufig du dinge pauschalisierst, ohne die genauen hintergründe zu kennen oder vorher nachzufragen. es fällt dir halt immer wieder schwer zu glauben, dass es menschen gibt, die ihre probleme auf eine andere art und weise lösen und dabei auch noch erfolgreich sein können.
ich gehe mal davon aus, dass du die atomarität ansprichst. diese hat aber nichts damit zu tun, dass alte werte durch neue werte in einer entsprechenden tabelle ersetzt werden sollen. und dies ist wegen des UPDATE befehls der fall. es handelt sich also nicht um eine SELECT abfrage.
Ilja
Hi,
erschreckend wie häufig du dinge pauschalisierst, ohne die genauen hintergründe zu kennen oder vorher nachzufragen. es fällt dir halt immer wieder schwer zu glauben, dass es menschen gibt, die ihre probleme auf eine andere art und weise lösen und dabei auch noch erfolgreich sein können.
Du redest wirr. Ich bin in der Lage, Tatsachen zu erkennen, wenn ich sie sehe - wenn Dir eine solche Fähigkeit fremd ist, so missbrauche Deine Mängel bitte nicht zur Denunzierung anderer.
ich gehe mal davon aus, dass du die atomarität ansprichst. diese hat aber nichts damit zu tun, dass alte werte durch neue werte in einer entsprechenden tabelle ersetzt werden sollen.
Wenn Du es nicht schaffst, die Konsequenzen der gewollten Art der Ersetzung zu sehen, ist das Dein Problem, nicht meins. Insbesondere werde ich nicht wegen Deiner Kurzsichtigkeit augenscheinliche Schäden bei anderen zulassen.
Cheatah, kopfschüttelnd
yo,
mal davon abgesehen, dass du nur blonde locken in deinem letzten beitrag geredet hast, erkläre doch mal, wie man anhand eines update befehls erkennen kann, dass die tabelle nicht in atomarer form vorliegt ?
Insbesondere werde ich nicht wegen Deiner Kurzsichtigkeit augenscheinliche Schäden bei anderen zulassen.
ich glaube, du hast den beruf verfehlt, solltest auf missionar umschulen. die hattten auch immer recht, wenn sie alle anderen platt gemacht haben. Amen....
Ilja