У меня есть две таблицы, listsalesorders
и listinvoices
. listsalesorders
является родительской таблицей, и каждый заказ на продажу может иметь много счетов, но каждый счет прикрепляется только к одному заказу на продажу.
В моем listsalesorers
у меня есть столбец, который отслеживает, сколько счетов-фактур находится в процессе, на основе того, был ли счет отправлен.
В последующем триггер обновления таблицы listinvoices
, я хочу обновить строку родительского заказа на продажу. Прямо сейчас у меня есть это
DELIMITER //
CREATE TRIGGER listinvoices_AUPD AFTER UPDATE ON listinvoices
FOR EACH ROW
BEGIN
UPDATE listsalesorders as so
SET so.invoicesInProgress = (SELECT COUNT(i.idx) FROM listinvoices i WHERE new.parentSOId = so.idx AND (i.sentToContact = 1 or i.sentToAccounting=1))
WHERE so.idx = new.parentSOId;
END//
DELIMITER ;
До того, как появилась хранимая процедура, которая обновлялась для каждого отдельного заказа на продажу, даже если обновлялся только один счет-фактура, что означало 30 секунд для обновления одного счета-фактуры. Это была моя попытка обновить только точный родительский заказ на продажу. Однако, когда я проверил скорость и выполнил что-то, что повлияло на все идентификаторы счета% 5 = 0, я обнаружил что-то странное, что почти все мои заказы на продажу затронули 382 invoicesInPorgress.
Что я делаю неправильно? Как правильно обновлять родительскую строку дочерней строки по триггеру? Я понимаю, что вы, возможно, захотите сказать просто использовать представление, однако во многих местах нашего клиентского приложения на этот столбец уже ссылаются, и изменить все эти запросы будет непросто, мне было бы гораздо проще просто исправить как рассчитывается столбец.