Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Поиск и замена из двух таблиц (словарь) / 7 сообщений из 7, страница 1 из 1
22.09.2014, 14:20:03
    #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
22.09.2014, 14:49:03
    #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
22.09.2014, 15:03:39
    #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
22.09.2014, 15:39:33
    #38753634
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск и замена из двух таблиц (словарь)
flaggyМой запрос меняет только одну строку в колонке, как сделать что бы менял все?

убрать where
...
Рейтинг: 0 / 0
22.09.2014, 15:51:08
    #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
22.09.2014, 16:01:31
    #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
22.09.2014, 16:02:28
    #38753659
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск и замена из двух таблиц (словарь)
ты ошибки хочешь исправлять, так это лучше на входе делать. а текущую базу, сделав проверку на вход, данные скинуть в отдельную таблицу и перенести их через новый вход,
который сразу исправляет ошибки.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Поиск и замена из двух таблиц (словарь) / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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