Вставить из одного стола в другой

У меня есть проект PHP / MySQL, над которым я сейчас работаю, и я застрял в сложной (или, по крайней мере, для меня) функции вставки.

3 таблицы, которые применяются здесь

клиент
Здесь уместны следующие поля: clientpk (первичный ключ AI) и клиентская область.

Templatedocs
, Соответствующие поля: templatepk, doctype, doctitle, templatescope

ClientDocs
Поля, которые имеют отношение к docpk, doctype, doctitle

То, что я хочу сделать, это иметь код после того, как я добавлю новую запись в таблицу клиента, которая вставляет записи из таблицы templatedocuments в таблицу clientdocuments, где client.clientscope = templatedocuments.templatescope, и я подозреваю, что это будет функция foreach.

Я только когда-либо работал с запросами вставки, которые вставляют из одной таблицы в другую, а не там, где используются 3 таблицы.

Если кто-то может дать мне основную идею, тогда я смогу понять все остальное, спасибо.

ОБНОВЛЕНИЕ: я пытаюсь сказать, что ClientTable — это Таблица A, TemplateDocuments — это Таблица B, а ClientDocuments — это TableC. Я знаю, как вставить записи из таблицы A в таблицу C, когда пишу функцию вставки из таблицы A. Однако я не знаю, как вставить данные из таблицы B (которая по сути является несвязанной таблицей ресурсов) в таблицу C, используя текущие переменные из таблицы B.

Чтобы поместить это в контекст, в Таблице B теперь есть 147 различных записей, только 50 из них окажутся в каждой таблице C, потому что есть различия, это область client.clientscope и templatedocuments.template, которая фильтрует соответствующие записи для вставить.

1

Решение

Ты можешь использовать joinв insert.. select синтаксис:

INSERT INTO clientdocuments (doctype, doctitle)
SELECT doctype, doctitle
FROM   templatedocuments t
JOIN   client c ON t.templatescope = c.clientscope
WHERE  client.clientpk = 123
0

Другие решения

Вы можете использовать триггер что-то связать это на стороне MySQL:

DELIMITER $$

USE `databaseName`$$

DROP TRIGGER /*!50032 IF EXISTS */ `trigger_TableName`$$

CREATE

TRIGGER `trigger_Templatedocs` AFTER UPDATE ON `Client`
FOR EACH ROW BEGIN
IF NEW.field <> OLD.field THEN
INSERT INTO Templatedocs (fieldName, fieldName2) VALUES (NEW.field, NEW.field);
END IF;
END;
$$

DELIMITER ;

Я не уверен, что это работает для вас или нет, но вы можете попробовать это.

0

Вы можете сделать это с помощью AFTER INSERT активировать client Таблица; что-то вроде ниже

DELIMITER $$
create trigger trg_insert_clientdocs
after insert on Client
for each row
begin
INSERT INTO ClientDocs(doctype, doctitle)
select td.doctype, td.doctitle
from Templatedocs td
where td.templatescope = new.clientscope;
END$$
DELIMITER ;

Над кодом триггера будет вставлена ​​запись в ClientDocs стол из Templatedocs таблица основана на совпадении templatescope колонка; где значение templatescope столбец такой же, как недавно вставленное значение в Client Таблица clientscope колонка.

0
По вопросам рекламы [email protected]