Мне нужно создать триггер MySQL, который умножает значения двух столбцов в одной таблице и сохраняет этот результат в столбце другой таблицы. У меня есть таблица под названием lineitems, которая вводит в нее размеры продукта. Мне нужно умножить высоту и ширину каждой строки строки и добавить их вместе, если они являются частью одного и того же номера заказа и сохранить этот результат в столбце sqft таблицы, называемой invoices. Мне нужно, чтобы это происходило каждый раз, когда таблица lineitems получает новую строку или обновляется существующая строка. Мне также нужно сделать очень похожий процесс для количества элементов каждой строки строки. И, наконец, мне нужно сделать третий расчет, где вес каждого продукта вычисляется и хранится в таблице строк. Однако этот расчет веса включает в себя третью таблицу (layup_config), чтобы получить вес только для слоев, используемых в заказе определенного продукта.
Код:
Я попытался установить этот триггер как в таблице счетов-фактур AFTER INSERT, так и после UPDATE, а также в таблице lineitems ПОСЛЕ ВСТАВКИ И ПОСЛЕ ОБНОВЛЕНИЯ. Однако я бы предпочел, чтобы это произошло в таблице строк, если это было возможно.
Примечание. Я использую phpmyadmin для доступа к триггерам таблицы и управления ими, чтобы программа имела форму, которая генерирует правильный формат триггера для таких вещей, как «CREATE TRIGGER» тригг-имя »… и т. Д. Пользователи программы взаимодействуют, чтобы вводить каждую строку. используя PHP для отправки данных в MySQL.
BEGIN INSERT INTO invoices SET invoices.totalquantity=SUM(lineitems.quantity) WHERE invoices.id=lineitems.invoiceid; INSERT INTO invoices SET invoices.totalsqft = ((SUM( lineitems.quantity ))*((lineitems.width + lineitmes.widthf)*(lineitems.height+lineitems.heightf))) WHERE invoices.id = lineitems.invoiceid; INSERT INTO lineitems SET lineitems.unitweight = SUM(layup_config.weight) WHERE layup-config.parentid IN (SELECT lineitems.productid FROM lineitems WHERE lineitems.invoiceid=invoices.id AND lineitems.displayorder=0); END
Я также попробовал следующий код вместо предыдущего кода:
//Inserts new invoice row but not lineitems data BEGIN SET @totalqty = (SELECT SUM(lineitems.quantity) FROM lineitems INNER JOIN invoices ON lineitems.invoiceid=invoices.id); INSERT INTO invoices SET invoices.NEW.totalquantity = @totalqty; END
Я думаю, что проблема, с которой я сталкиваюсь, заключается в том, что раздел для ввода данных для таблицы строк приведен на той же странице, что и код для сохранения данных таблиц-фактур. Но оба обновляются, когда нажата одна и та же кнопка «Сохранить». Я думаю, что я пытаюсь обновить таблицу счетов-фактур до того, как таблица фактических данных фактически будет сохранена.
Пример: данные счета-фактуры вступают в силу, запускаются триггеры счетов до того, как данные линейных данных вводятся, но им необходимо использовать данные lineitems, поэтому он терпит неудачу.
Я думаю, что наличие триггера в таблице lineitems – правильный путь, но я не могу заставить триггер работать правильно в этой таблице …
Пожалуйста помоги!!!!!
Спасибо!