В 1 таблице некоторые записи нужно изменить, данными из 2 таблицы
Во 2 таблице хранятся сопоставления `старого номера` и `нового номера`
Если в 1 таблице находиться `старый номер` из 2 таблицы, заменить на `новый номер`
Можно это как-то сделать средствами только Mysql ?
Winston
8.11.2014 - 17:53
UPDATE
`logs` AS l
INNER JOIN
`com_ru` AS c ON l.tovar = c.ru
SET
l.tovar = c.com
я боюсь это запускать :ph34r:
Не работает что-то, думает думает ... и ничего не выдает
Может потому что таблицы большие
в 1 - 118,601 записей
во 2 - 1,902 записи
вот структура 1 таблицы (часть правда)
http://pixs.ru/showimage/1JPG_5461558_14643021.jpgвот 2 таблица
http://pixs.ru/showimage/2JPG_1793664_14643035.jpgнужно поменять 211401001115 на 20190240607
помогите разобраться почему не работает, или как это сделать ?
AllesKlar
9.11.2014 - 00:35
Это одноразовая операция?
Не проще ли скриптом пройтись?
_____________
[продано копирайтерам]
будет 2 разовая.
Один раз сейчас , и чуть позже ещё раз , но уже с того места где закончил.
Скриптом я это могу сделать, думал есть вариант попроще.
Winston
9.11.2014 - 01:05
Цитата (Kusss @ 8.11.2014 - 22:14) |
Не работает что-то, думает думает ... и ничего не выдает
|
Должно работать... ты запускал это в PMA? так и не дождался завершения операции?
Запусти запрос из скрипта может...
вот что выдает, причем я сократил условием 1 таблицу до 2000 строк
Query execution was interrupted
Winston
9.11.2014 - 01:27
Не хватает времени все перелопатить...
А индексы стоят на полях l.tovar и c.ru?
Бредовая идея конечно, но если нету индексов, то можно их добавить, запустить запрос, потом удалить, должно ускорить обновление...
Можно попробовать обновлять кусками, в условие WHERE добавить id > 0 AND id <= N, после выполнения опять id > N AND id <= N+ и т.д. но тоже как-то не ахти...
AllesKlar
9.11.2014 - 01:42
Цитата (Winston @ 9.11.2014 - 01:27) |
Можно попробовать обновлять кусками, в условие WHERE добавить id > 0 AND id <= N, после выполнения опять id > N AND id <= N+ и т.д. но тоже как-то не ахти... |
Поле ввести булевое, при обновлении выставлять его в true
Обновлять все, для которых это поле false
Запустить скрипт из консоли.
Выбрать из таблиц пару сотен записей и на них отладить запрос со stackoverflow, после этого запустить запрос из консоли и пойти спать.
В общем, все ресурсоемкие вещи делать в консоли.
_____________
[продано копирайтерам]
Индексы очень помогли - спасибо.
Затронута 55461 строка. ( Запрос занял 3.8293 сек. )
Winston
10.11.2014 - 15:11
Цитата (Kusss @ 10.11.2014 - 12:57) |
Индексы очень помогли |
Значит хорошая была идея
в продолжении темы.
как изменить имеющийся запрос
UPDATE
`logs` AS l
INNER JOIN
`com_ru` AS c ON l.tovar = c.ru
SET
l.tovar = c.com
WHERE
CHAR_LENGTH(l.tovar) > 11
что бы не было дубликатов, и сумму соединить
Цитата |
4444 - 5 2222 - 2 (меняется на 4444 и сумму приплюсовать к имеющейся) 1111 - 3 |
Рузультат такой вот
или лучше в 2 приема сделать ?
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.