Доброго времени суток, товариші! Прошу порадити як краще зробити.
Мета - відновити дані з однієї таблиці в іншу. Структура таблиць ідентична.
БД на різних серверах.
шматок коду
Цей запит я беру з бази. Але не можу розібратися як після SELECT зробити UPDATE потрібної інформації.
І ще питання як правильно зробити так, щоб обсяг запиту на відновлення не поклав базу даних на довго?
Тепер у мене глухий кут з implode ( ',' $ result);
це масив отриманий SELECT му з БД. Викликаю implode (); він дає тільки частина масиву до першого роздільника. Як мені отримати весь масив?
заданий 5 Вересня '16 об 11:14
Для цього зручно скористатися запитом INSERT INTO. SELECT. за допомогою якого ви можете перегнати дані з однієї таблиці в іншу. Так як у вас таблиці знаходяться в різних базах даних, то краще за все скористатися розширеної нотації, вказавши перед іменами таблиць явно назви баз даних. В цьому випадку ви не будете залежати в запиті від поточної бази даних.
Нові записи вставити в таблицю, для того, щоб оновити існуючі дані в запит слід додати ключове слово ON DUPLICATE KEY UPDATE. затвердження в якому спрацюють в тому випадку, якщо в таблиці вже є запис зі вставляються первинним ключем. В цьому випадку, слід оновити вже існуючі значення, так як це показано в прикладі нижче.
У наступному запиті, дані з таблиці table_one бази даних currdb перегоняются в однойменну таблицю базу даних otherdb.
У конструкції ON DUPLICATE KEY UPDATE доведеться перерахувати всі стовпці, які ви хочете оновити.
Для того, щоб не заблокувати таблиці на довго, зменшуйте кількість записів в конструкції LIMIT і оновлюйте дані в кілька прийомів.
Якщо бази даних у вас розташовані на різних серверах, тоді доведеться спочатку витягти SELECT-запиту дані з першого сервера, а потім сформувати багатостроковий INSERT-запит до другого сервера. Тут так само можна скористатися конструкцією ON DUPLICATE KEY UPDATE. для того, щоб оновлювати вже існуючі дані
У цього способу є одне обмеження, розмір SQL-запиту, який ви спрямовуєте сервера не повинен перевищувати розмір заданий параметром max_allowed_packet (потрібно або збільшити розмір цієї директиви, або зменшити кількість записів в LIMIT).
Плюс, якщо це не разова, а переодическая операція, слід розглянути штатний механізм реплікації, який пережене дані набагато швидше і точніше, ніж це буде в будь-який PHP-продажу.