преобразовать результаты типа данных из оператора MySQL SELECT из varchar в int

Мне нужно запустить оператор выбора, чтобы получить данные из столбца таблицы 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

Я все же предпочел бы сделать это с помощью метода триггера, если это возможно.

Спасибо!!

0

Решение

Задача ещё не решена.

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

Других решений пока нет …