powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Поиск и замена из двух таблиц (словарь)
7 сообщений из 7, страница 1 из 1
Поиск и замена из двух таблиц (словарь)
    #38753514
flaggy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у меня получилось

update phrases, dict
set phrases.name = replace(phrases.name, dict.source, dict.translate)
where phrases.name <> replace(phrases.name, dict.source, dict.translate)

pharses table

id | name | .. | ..
1 | macbook wht comput | ..
2 | lenova blck god nb | ..

dict table

id | source | translate
1 | wht | white
2 | god | good
3 | lenova | lenovo
4 | blck | black
5 | comput | computer
6 | nb | notebook

Мой запрос меняет только одну строку в колонке, как сделать что бы менял все?
...
Рейтинг: 0 / 0
Поиск и замена из двух таблиц (словарь)
    #38753559
Anatoly B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
flaggy,

скорее меняет одно слово. Попробуйте выполнить, там должно быть все наглядно:
авторselect pharses.name , replace(pharses.name, dict.source, dict.translate)
from pharses, dict
where pharses.name <> replace(pharses.name, dict.source, dict.translate)
...
Рейтинг: 0 / 0
Поиск и замена из двух таблиц (словарь)
    #38753580
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flaggyу меня получилось

update phrases, dict
set phrases.name = replace(phrases.name, dict.source, dict.translate)
where phrases.name <> replace(phrases.name, dict.source, dict.translate)

pharses table

id | name | .. | ..
1 | macbook wht comput | ..
2 | lenova blck god nb | ..

dict table

id | source | translate
1 | wht | white
2 | god | good
3 | lenova | lenovo
4 | blck | black
5 | comput | computer
6 | nb | notebook

Мой запрос меняет только одну строку в колонке, как сделать что бы менял все?


set phrases.name = replace(phrases.name, dict.source, dict.translate)
where phrases.name <> replace(phrases.name, dict.source, dict.translate)
ну это ересь, не переживай, апдейт не проходит, тригер не срабатывает, ничего не шуршит, если старое и новое значения одинаковые

попробуй в базе
update table set field = field;

покажет затронуто 0 строк
...
Рейтинг: 0 / 0
Поиск и замена из двух таблиц (словарь)
    #38753634
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flaggyМой запрос меняет только одну строку в колонке, как сделать что бы менял все?

убрать where
...
Рейтинг: 0 / 0
Поиск и замена из двух таблиц (словарь)
    #38753645
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixflaggyМой запрос меняет только одну строку в колонке, как сделать что бы менял все?

убрать where

а вот что имееться ввиду под одну меняет...тут не понятно...

он веар убирал типо ради оптимизации...

у него полное пересечение и получаеться для каждой фразы из первой, есть варианты с
каждой строкой из словаря.

а делаеться лиш одна замена, возможно изза того, что обновление берёться из временой таблицы


тоесть вместо
macbook wht comput ->> wht/white = macbook white comput ->comput /computer = macbook white computer

получаеться следующее.

получаем временую таблицу вида

macbook wht comput, wht,white
macbook wht comput, comput,computer

субд делает два обновления колонки

сначала
macbook wht comput перезаписываеться значением macbook white comput (обработка первой строки)

потом
macbook white comput перезаписываеться значением macbook wht computer
ведь формула для второй строки меняет компьютер но не меняет вайт ошибочный

!!!
'
...
Рейтинг: 0 / 0
Поиск и замена из двух таблиц (словарь)
    #38753655
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так что автору надо ити по другому пути, чтоб подобное сделать.

надо цыкл организовать - например курсором....

делаем курсор на селект выборку(запрос как в обновлении)

select p.id,p.title,d.source,d.translate
from pharses p join dict d on(POSITION(d.source IN p.name))

а потом в цикле ити по этому курсору,
current_id = null;
current_name = '';

while(cursor reads)

IF id <> current_id THEN

IF current_name then update phrases set name = current_name where id = current_id;
current_id = id;
current_name = name;
end IF

current_name = replace(current_name, source, translate) END IF

end while

IF current_name then update phrases set name = current_name where id = current_id;
current_id = id;
current_name = name;
end IF

я не следил за провильностью синтаксиса...я лишь очертил идею с курсором...чтоб
не текстом распинаться.

но задача в целом конечно вызывает вопросы...зачем?
...
Рейтинг: 0 / 0
Поиск и замена из двух таблиц (словарь)
    #38753659
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты ошибки хочешь исправлять, так это лучше на входе делать. а текущую базу, сделав проверку на вход, данные скинуть в отдельную таблицу и перенести их через новый вход,
который сразу исправляет ошибки.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Поиск и замена из двух таблиц (словарь)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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