Hallo!
Ich habe zwei Tabellen: texte: `id` INT, `text` MEDIUMBLOG ersatz: `neu` VARCHAR, `alt` MEDIUMBLOB
Jetzt soll in dem `text` einer bestimmten `id`, also in einem bestimmten Eintrag der Tabelle texte, die Ersetzung vorgenommen werden. Und zwar sollen alle Vorkommen von `alt` durch den jeweils dazugehörenden String `neu` ersetzt werden.
Ich würde es gerne möglichst viel in MySQL lösen, die Oberfläche ist in PHP geschrieben.
Hat jemand einen Vorschlag? Thomas
am Wed, dem 03.10.2007, um 16:37:22 +0200 mailte Thomas Schmidt folgendes:
Hallo!
Ich habe zwei Tabellen: texte: `id` INT, `text` MEDIUMBLOG ersatz: `neu` VARCHAR, `alt` MEDIUMBLOB
Jetzt soll in dem `text` einer bestimmten `id`, also in einem bestimmten Eintrag der Tabelle texte, die Ersetzung vorgenommen werden. Und zwar sollen alle Vorkommen von `alt` durch den jeweils dazugehörenden String `neu` ersetzt werden.
Ich würde es gerne möglichst viel in MySQL lösen, die Oberfläche ist in PHP geschrieben.
Ich nix MySQL, aber in PostgreSQL könnte es so gehen:
test=# select * from text; id | t ----+------------------- 1 | erster test-text 3 | zweiter test-text 2 | zweiter test-text (3 rows)
test=*# select * from ersatz ; neu | alt ---------+--------- dritter | zweiter (1 row)
test=*# update text set t = regexp_replace(t, (select alt from ersatz), (select neu from ersatz)) where id=3; UPDATE 1 test=*# select * from text; id | t ----+------------------- 1 | erster test-text 2 | zweiter test-text 3 | dritter test-text (3 rows)
Schau mal, was Du in MySQL so an Ersetzungsfunktionen findest.
Hallo Thomas,
Ich habe zwei Tabellen: texte: `id` INT, `text` MEDIUMBLOG ersatz: `neu` VARCHAR, `alt` MEDIUMBLOB
Jetzt soll in dem `text` einer bestimmten `id`, also in einem bestimmten Eintrag der Tabelle texte, die Ersetzung vorgenommen werden. Und zwar sollen alle Vorkommen von `alt` durch den jeweils dazugehörenden String `neu` ersetzt werden.
afaik gibt es Funktionen mit Namen wie str_replace in MySQL.
Fallgrube bei MySQL: es kann nicht gleichzeitig in einer Tabelle lesen und schreiben. Etwas ala
update texte set text=(select neu from ersatz where alt="pattern") where text rlike "pattern";
geht deshalb nicht (zumindest nicht in der 4er, kA, wie das in der 5er ist).
mfg, Fabian
lug-dd@mailman.schlittermann.de