|
|
|
Поиск и замена из двух таблиц (словарь)
|
|||
|---|---|---|---|
|
#18+
у меня получилось 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 Мой запрос меняет только одну строку в колонке, как сделать что бы менял все? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2014, 14:20:03 |
|
||
|
Поиск и замена из двух таблиц (словарь)
|
|||
|---|---|---|---|
|
#18+
flaggy, скорее меняет одно слово. Попробуйте выполнить, там должно быть все наглядно: авторselect pharses.name , replace(pharses.name, dict.source, dict.translate) from pharses, dict where pharses.name <> replace(pharses.name, dict.source, dict.translate) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2014, 14:49:03 |
|
||
|
Поиск и замена из двух таблиц (словарь)
|
|||
|---|---|---|---|
|
#18+
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 строк ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2014, 15:03:39 |
|
||
|
Поиск и замена из двух таблиц (словарь)
|
|||
|---|---|---|---|
|
#18+
flaggyМой запрос меняет только одну строку в колонке, как сделать что бы менял все? убрать where ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2014, 15:39:33 |
|
||
|
Поиск и замена из двух таблиц (словарь)
|
|||
|---|---|---|---|
|
#18+
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 ведь формула для второй строки меняет компьютер но не меняет вайт ошибочный !!! ' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2014, 15:51:08 |
|
||
|
Поиск и замена из двух таблиц (словарь)
|
|||
|---|---|---|---|
|
#18+
так что автору надо ити по другому пути, чтоб подобное сделать. надо цыкл организовать - например курсором.... делаем курсор на селект выборку(запрос как в обновлении) 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 я не следил за провильностью синтаксиса...я лишь очертил идею с курсором...чтоб не текстом распинаться. но задача в целом конечно вызывает вопросы...зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2014, 16:01:31 |
|
||
|
Поиск и замена из двух таблиц (словарь)
|
|||
|---|---|---|---|
|
#18+
ты ошибки хочешь исправлять, так это лучше на входе делать. а текущую базу, сделав проверку на вход, данные скинуть в отдельную таблицу и перенести их через новый вход, который сразу исправляет ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2014, 16:02:28 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=162&tid=1834202]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
27ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
22ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 271ms |

| 0 / 0 |
