grind3r
Новичок
Синхронизация таблиц из разных mysql-баз
Доброго времени суток!
Возникла потребность переделать php-скрипт синхронизации таблиц.
Вроде простая задача, но хочется разобраться подробно и найти самое простое решение.
Условно обозначим:
- t1: таблица1. Та, которая должна быть обновлена.
- t2: таблица2. Та, из которой берутся данные для обновления.
----------------------
Прежняя версия скрипта:
- берет все записи из таблицы t2
- добавляет и обновляет записи в t1
- НЕ УДАЛЯЮТСЯ ЗАПИСИ, которых уже нет в t2
- обновление с помощью вот такого запроса:
INSERT t1 (поля)
SELECT поля FROM t2
ON DUPLICATE KEY UPDATE
поле1 = VALUES(поле1), поле2 = VALUES(поле2),...
----------------------
В новой постановке:
"...нужно доработать логику, чтобы из таблицы удалялись записи, которые отсутствуют в t2. При удалении делать проверку, чтобы удаляемые записи не имели связей, а так же не имели дочерних записей."
Новая версия должна:
- брать все записи из таблицы t2
- добавлять и обновлять записи в t1
- УДАЛЯТЬ ЗАПИСИ, которых уже нет в t2
* Примечание: Вариант с предварительной очисткой t1 не подходит
=======================
Что можете посоветовать? Какие лучше внести изменения в скрипт:
1. Накрутить php-логику
2. Накрутить SQL-логику
Сопутствующие вопросы (не принимайте за глупость):
- В php есть функция mysql_affected_rows(), но нет обратной, например mysql_not_affected_rows(). Мелочь, а приятно было бы. Кто-нибудь решал практически задачу по выборке не затронутых, в результате последнего запроса, записей?
Доброго времени суток!
Возникла потребность переделать php-скрипт синхронизации таблиц.
Вроде простая задача, но хочется разобраться подробно и найти самое простое решение.
Условно обозначим:
- t1: таблица1. Та, которая должна быть обновлена.
- t2: таблица2. Та, из которой берутся данные для обновления.
----------------------
Прежняя версия скрипта:
- берет все записи из таблицы t2
- добавляет и обновляет записи в t1
- НЕ УДАЛЯЮТСЯ ЗАПИСИ, которых уже нет в t2
- обновление с помощью вот такого запроса:
INSERT t1 (поля)
SELECT поля FROM t2
ON DUPLICATE KEY UPDATE
поле1 = VALUES(поле1), поле2 = VALUES(поле2),...
----------------------
В новой постановке:
"...нужно доработать логику, чтобы из таблицы удалялись записи, которые отсутствуют в t2. При удалении делать проверку, чтобы удаляемые записи не имели связей, а так же не имели дочерних записей."
Новая версия должна:
- брать все записи из таблицы t2
- добавлять и обновлять записи в t1
- УДАЛЯТЬ ЗАПИСИ, которых уже нет в t2
* Примечание: Вариант с предварительной очисткой t1 не подходит
=======================
Что можете посоветовать? Какие лучше внести изменения в скрипт:
1. Накрутить php-логику
2. Накрутить SQL-логику
Сопутствующие вопросы (не принимайте за глупость):
- В php есть функция mysql_affected_rows(), но нет обратной, например mysql_not_affected_rows(). Мелочь, а приятно было бы. Кто-нибудь решал практически задачу по выборке не затронутых, в результате последнего запроса, записей?