Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вопрос по множественной замене значений в строке / 11 сообщений из 11, страница 1 из 1
27.11.2013, 22:56:39
    #38480817
ser79
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по множественной замене значений в строке
Добрый день,

Ситуация такая, есть таблица t1 со столбцом следующих данных (запятая просто как разделитель текстовой информации в строке):
1: a1, a2 , a3, a4.......
2: b1, b2, b3, b4......
3: c1 , c2, c3 , c4......

Есть таблица rt1 с 2 столбцами (искомое | заменяемое):
1: a2 | aa2
2: x1 | xx1
3: c1 | cc1
4: v1 | vv1
5: c3 | cc3
...

Необходимо заменить значения таблицы t1 (выделены жирным) заменяемыми значениями таблицы rt1, т.е. должно получиться следующее:
1: a1, aa2 , a3, a4.......
2: b1, b2, b3, b4......
3: cc1 , c2, cc3 , c4......

Споткнулся об то, что в строке 3 таблицы t1 необходимо заменить 2 (а в реале может быть и 3 и более!) значения. Прошу помощи!
...
Рейтинг: 0 / 0
27.11.2013, 23:43:18
    #38480862
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по множественной замене значений в строке
Операция - одноразовая или регулярная?
...
Рейтинг: 0 / 0
28.11.2013, 07:56:07
    #38481050
ser79
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по множественной замене значений в строке
Немного не понял, что вы имеете ввиду. Одноразовая.
...
Рейтинг: 0 / 0
28.11.2013, 08:49:50
    #38481087
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по множественной замене значений в строке
Тогда разбейте мультиполе на отдельные поля, выполните замену в каждом отдельном поле, затем соберите обратно.
Если записей не очень дохрена - можно даже вывалить для этого данные в Эксель. Там бить на поля удобнее.
...
Рейтинг: 0 / 0
28.11.2013, 08:58:21
    #38481098
ser79
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по множественной замене значений в строке
Такой вариант непойдёт, потому что в строке таблицы t1 нет чёткого разделителя. Искаться может целиком комбинация "b1, b2" и заменяться на "bb1 bb2". Тут всё зависит от того, какое значение первой колонки в таблице rt1.
Записей мало, в t1 и rt1 ну по 20-30 максимум.
...
Рейтинг: 0 / 0
28.11.2013, 09:19:22
    #38481112
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по множественной замене значений в строке
В таком случае выполните пачку запросов в рамках процедуры - курсор по одной из таблиц + препаред статемент.
...
Рейтинг: 0 / 0
28.11.2013, 09:29:05
    #38481122
ser79
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по множественной замене значений в строке
А можно в виде примера накидать? Так непонятно...
...
Рейтинг: 0 / 0
28.11.2013, 09:53:24
    #38481151
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по множественной замене значений в строке
Идеологически:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create procedure
declare cur cursor as select s1,s2 from t2
declare stop handler for no record
do
fetch cur into @s1, @s2
prepare stmt from update t1 set f1=replace(f1,@s1,@s2)
execute stmt
loop
stop:
end procedure
...
Рейтинг: 0 / 0
28.11.2013, 10:18:06
    #38481190
ser79
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по множественной замене значений в строке
Спасибо, буду пробовать!

А элегантным селектом вопрос не разрешить?
...
Рейтинг: 0 / 0
28.11.2013, 10:19:31
    #38481194
ser79
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по множественной замене значений в строке
С использованием REPLACE и какими-нибудь хитрыми объединениями t1 и rt1?
...
Рейтинг: 0 / 0
28.11.2013, 11:15:22
    #38481314
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по множественной замене значений в строке
Да не вопрос...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create procedure
cycle: loop
update t1, t2 set t1.txt = replace(t1.txt, t2.s1, t2.s2) where instr(t1.txt, t2.s1) > 0;
select row_count() into @cnt
if @cnt = 0 then
  leave done
end if
end loop cycle
done:
end procedure


Но потенциально можно зациклиться.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вопрос по множественной замене значений в строке / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]