[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Перезаписать данные из разных таблиц
Kusss
В 1 таблице некоторые записи нужно изменить, данными из 2 таблицы
Во 2 таблице хранятся сопоставления `старого номера` и `нового номера`

Если в 1 таблице находиться `старый номер` из 2 таблицы, заменить на `новый номер`

Можно это как-то сделать средствами только Mysql ?
Kusss
UPDATE 
`logs` AS l
INNER JOIN
`com_ru` AS c ON l.tovar = c.ru
SET
l.tovar = c.com
я боюсь это запускать :ph34r:
Kusss
Не работает что-то, думает думает ... и ничего не выдает
Может потому что таблицы большие
в 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
Это одноразовая операция?
Не проще ли скриптом пройтись?

_____________
[продано копирайтерам]
Kusss
будет 2 разовая.
Один раз сейчас , и чуть позже ещё раз , но уже с того места где закончил.

Скриптом я это могу сделать, думал есть вариант попроще.
Winston
Цитата (Kusss @ 8.11.2014 - 22:14)
Не работает что-то, думает думает ... и ничего не выдает

Должно работать... ты запускал это в PMA? так и не дождался завершения операции?
Запусти запрос из скрипта может...
Kusss
вот что выдает, причем я сократил условием 1 таблицу до 2000 строк
Query execution was interrupted
Winston
Не хватает времени все перелопатить...
А индексы стоят на полях l.tovar и c.ru?
Бредовая идея конечно, но если нету индексов, то можно их добавить, запустить запрос, потом удалить, должно ускорить обновление...

Можно попробовать обновлять кусками, в условие WHERE добавить id > 0 AND id <= N, после выполнения опять id > N AND id <= N+ и т.д. но тоже как-то не ахти...
Kusss
спасибо, завтра попробую
AllesKlar
Цитата (Winston @ 9.11.2014 - 01:27)
Можно попробовать обновлять кусками, в условие WHERE добавить id > 0 AND id <= N, после выполнения опять id > N AND id <= N+ и т.д. но тоже как-то не ахти...

Поле ввести булевое, при обновлении выставлять его в true
Обновлять все, для которых это поле false
Запустить скрипт из консоли.

Выбрать из таблиц пару сотен записей и на них отладить запрос со stackoverflow, после этого запустить запрос из консоли и пойти спать.

В общем, все ресурсоемкие вещи делать в консоли.

_____________
[продано копирайтерам]
Kusss
Индексы очень помогли - спасибо.
Затронута 55461 строка. ( Запрос занял 3.8293 сек. )
Winston
Цитата (Kusss @ 10.11.2014 - 12:57)
Индексы очень помогли

Значит хорошая была идея smile.gif
Kusss
в продолжении темы.
как изменить имеющийся запрос
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
Рузультат такой вот
Цитата
4444 - 7
1111 - 3

или лучше в 2 приема сделать ?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.