alex_: search and replace in mysql

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.

  1. 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

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. 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 .-)

      1. 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

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. 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

          1. 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

            --
            X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
            1. 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ß

    2. 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

      1. 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

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. 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