Экспорт table1 с отношениями к table3 через table2 с переустановленным идентификатором; - PullRequest
0 голосов

У меня есть 3 таблицы, которые нужно экспортировать как .sql для будущего импорта. Основная таблица, которую мне нужно экспортировать, связана с таблицей через другую таблицу. Ниже приведен краткий обзор схемы:

enter image description here

Основная проблема заключается в том, что идентификатор каждой из таблиц не начинается с 1, как ожидалось, поскольку на этапе разработки много входных данных для тестирования.

Можно ли в этом примере экспортировать в таблицу изображений файла .sql, включая отношения (image_tags, теги) с переустановленным идентификатором к изображениям и т. Д. Для других таблиц, но сохранить отношения в соответствии с новым идентификатором?

1 Ответ

0 голосов
/ 28 июня 2019

Во-первых, ничего не делайте снизу в вашей текущей / LIVE базе данных. Как вы сказали, что хотите экспортировать данные в другую базу данных, примените следующие шаги к другой базе данных-

Шаг 1: будьте готовы к новой базе данных с данными из вашей базы данных LIVE.

Шаг 2: Добавьте 2 новых столбца "image_id_new" и "tag_id_new" в таблицу "images_tags".

Шаг 3: Выполните следующие 2 сценария, чтобы обновить только что созданные 2 столбца -

Перед выполнением приведенных ниже сценариев, пожалуйста, убедитесь, что в любом из столбцов "image_id" и "tag_id" нет доступных значений 0

UPDATE images_tags A
INNER JOIN 
(
    SELECT image_id,
    @row_num := IF(`image_id` <> 0,@row_num+1,0)AS RowNumber     
    FROM images_tags,
    (SELECT @row_num := 0) r
    ORDER BY image_id
)B ON A.image_id = B.image_id
SET A.image_id_new = RowNumber;

UPDATE images_tags A
INNER JOIN 
(
    SELECT tag_id,
    @row_num := IF(`tag_id` <> 0,@row_num+1,0)AS RowNumber   
    FROM images_tags,
    (SELECT @row_num := 0) r
    ORDER BY tag_id
)B ON A.tag_id = B.tag_id
SET A.tag_id_new = RowNumber;

Шаг 4: Удалите связи (если есть) между таблицами. Изображения >> Теги_изображений >> Теги.

Шаг 5: Теперь обновите все три таблицы, используя следующие скрипты-

UPDATE images A INNER JOIN images_tags B ON A.id = B.image_id
SET A.id = B.image_id_new;

UPDATE tags A INNER JOIN images_tags B ON A.id = B.tag_id
SET A.id = B.tag_id_new;

UPDATE images_tags
SET image_id = image_id_new,tag_id = tag_id_new;

Шаг 6: Удалите оба новых столбца из таблицы images_tags с помощью следующего скрипта-

ALTER TABLE `images_tags` 
DROP COLUMN `tag_id_new`,
DROP COLUMN `image_id_new`;

Шаг 7: восстановить отношения между таблицами. Изображения >> Теги_изображений >> Теги, если необходимо.

Вот и все. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...