powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Миграция на новую структуру таблиц
1 сообщений из 1, страница 1 из 1
Миграция на новую структуру таблиц
    #38891848
DeepVarvar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вобщем все вроде как тривиально и просто. Ан нет.
Пишу потихоньку специальный дамп миграции, который в конечном итоге должен будет отработать на боевой БД.
И столкнулся с некоторым непониманием (моим) как это сделать правильно. Теперь более конкретно.

Есть две сущности: проекты и шаблоны.

Старая структура: все проекты могли использовать любой из шаблонов. Но в конкретный момент естественно только один.

Там две таблицы:

Код: plaintext
1.
projects -> id, title, template_id
templates -> id, title

Новая структура: у каждого проекта должен быть свой собственный набор шаблонов. Активным может быть только один шаблон из «личного» набора.

Теперь у нас три таблицы:

Код: plaintext
1.
2.
new_projects -> id, title, current_template_id
new_templates -> id, title (, old_id)
new_projects_templates -> project_id, template_id

Некоторые проекты используют одинаковые шаблоны. Первым шагом я «размножил» шаблоны и перебил им автоинкрементные айдишники. Однако, временно сохранил old_id, поэтому он тут выше указан в скобочках, т.к. после всех манипуляций я удалю это поле через ALTER TABLE.

Вот запрос втыкающий «размноженный» результат в новую табулю шаблонов:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SET @cnt := 0;
INSERT INTO new_templates (
    SELECT
            (@cnt := @cnt + 1) id,
            sub.title,
            sub.old_id
        FROM (
            SELECT
                    t.title,
                    t.id old_id
                FROM templates t
                LEFT JOIN projects p
                    ON p.template_id = t.id
                WHERE p.id IS NOT NULL -- кастыль для шаблонов без привязки к проектам
                ORDER BY t.id ASC -- чтобы вставка была в старом порядке создания шаблонов
        ) sub
);



Ну а теперь никак не сообразу как запилить еще два шага:

2) вставка проектов в новую таблицу проектов с корректной привязкой к шаблону.
3) вставка в таблицу связи проекты-шаблоны.

Вот так выглядит попытка тестовой выборки:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
-- счетчик не сброшен
-- в нем максимальный айдишник после вставки
-- теперь декрементируем его
SELECT
    (@cnt := @cnt - 1),
    p.id      project_id,
    nt.old_id nt_old_id,
    nt.id     nt_id
    FROM projects p -- из старой таблицы проектов
    LEFT JOIN new_templates nt -- из новой таблицы шаблонов
        ON nt.id = @cnt



Естессно выдает он полную хрень. Как правильно то запилить?
Вроде как иду то правильным путем...
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Миграция на новую структуру таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]