MySQL UPDATE с SELECT SUM из другой таблицы

309
12 февраля 2020, 11:50

Есть две таблицы 'orders' (id, bank_name, order_amount) и 'balances' (bank_name, total_balance). С помощью формы данные добавляются в таблицу 'orders' и в тоже время обновляется значение total_balance в 'balances' в зависимости от bank_name.

Существует также форма для того чтобы изменять какое-то значение в таблице 'orders'. Все это прекрасно работает.

Если при помощи второй формы изменять значение order_amount в таблице 'orders', то значение total_balance в таблице 'balances' также должно меняться. Для этого я хочу сделать следующее:

При изменении order_amount в таблице 'orders', с помощью SUM() должно подсчитываться общая сумма всех order_amount в зависимости от bank_name и обновляться знание total_balance в таблице 'balances'.

То есть, изменяем стоку в таблице 'orders', суммируем order_amount и обновляем значение total_balance в 'balances':

$result1 = $mysqli->query("UPDATE ".$orders." SET `bank_name` = '$bank_name', `order_amount` = '$order_amount' where id = '$id'");
$result2 = $mysqli->query("UPDATE ".$balance." SET `total_balance` = (SELECT SUM(order_amount) AS order_amount FROM ".$orders." GROUP by bank_name) WHERE bank_name = '$bank_name'");

$result1 работает, но $result2 к сожалению нет.. В чем может быть ошибка?

Answer 1

Ну, не работает, потому что

SELECT SUM(order_amount) AS order_amount FROM ".$orders." GROUP by bank_name 

выбирект несколько строк, а вам нужна одна. Нужно как минимум добавить

WHERE bank_name = '$bank_name'

к селекту.

А все записи можно обновить так -

UPDATE `".$balance."` as `b`
JOIN (SELECT SUM(`order_amount`) AS `order_amount`, `bank_name` FROM `".$orders."` GROUP by `bank_name`) as `o` ON `b`.`bank_name` = `o`.`bank_name`
SET `b`.`total_balance` = `o`.`order_amount`;
READ ALSO
Выводит вместо слов их код, как исправить?

Выводит вместо слов их код, как исправить?

Выводит вместо слов их кодКак это можно исправить?

306
Проблема с миграцией баз данных в Laravel

Проблема с миграцией баз данных в Laravel

при миграции базы постоянно выдает вот такую ошибку, не понимаю что нужно исправить

322