Мне нужно запустить оператор выбора, чтобы получить данные из столбца таблицы lineitems.quantity, суммировать значения, где идентификатор совпадает, и сохранить результат в столбце во второй таблице. Моя проблема заключается в том, что тип данных для lineitems.quantity — это varchar, но мне нужно выполнить вычисления для данных и сохранить их в invoices.totalquantity (тип данных int). Каждое значение в lineitems.quantity является целым числом, но получено из текстовых полей пользовательского ввода, которые, как я считаю, всегда проходят как строковое значение?
Что касается того, где я реализую код, мне нужно либо выбрать данные из MySQL, используя php, преобразовать типы, выполнить свои вычисления и обновить таблицу счетов, либо мне нужно настроить триггер непосредственно в MySQL, чтобы столбцы выбирались и преобразование, вычисление и обновление происходят после каждой новой строки lineitems.
ПРИМЕЧАНИЕ. Таблица счетов и таблица lineitems получают свои вставки / обновления после нажатия одной и той же кнопки в приложении, поэтому они обновляются одновременно (хотя, lineitems обновляется только в том случае, если в этой части страницы произошло изменение). где счета всегда обновляются при нажатии кнопки).
Мой код:
В настоящее время некоторый код на стороне приложения выглядит следующим образом:
$sglitotalsget="SELECT (CONVERT(lineitems.quantity) as INT)as sgtotqty FROM lineitems INNER JOIN invoices on lineitems.invoiceid=invoices.id WHERE lineitems.invoiceid = ".$this->invoiceid."";
$this->db->query($sglitotalsget);while($this->db->fetchArray($sgtotalsresult)){
$sglitotalsupdate = "UPDATE invoices SET invoices.totalquantity = ".array_sum($sglitotalsget)." WHERE invoices.id= ".$this->invoiceid."";
}
Я также пытался настроить триггер, но он всегда терпел неудачу. Этот код выглядит следующим образом:
ПРИМЕЧАНИЕ: триггер всегда был настроен на элементах line после вставки / обновления.
BEGIN
SET @totalqty = (SELECT SUM(lineitems.quantity) as qty FROM lineitems INNER JOIN invoices ON lineitems.invoiceid=invoices.id);
INSERT INTO invoices SET invoices.NEW.totalquantity = @totalqty;
END
А ТАКЖЕ:
BEGIN
update invoices INNER JOIN lineitems on (invoices.id=lineitems.invoiceid) SET invoices.totalquantity=SUM(lineitems.quantity) WHERE invoices.id=lineitems.invoiceid;
END
Я все же предпочел бы сделать это с помощью метода триггера, если это возможно.
Спасибо!!
Задача ещё не решена.
Других решений пока нет …