Как сделать этот триггер работоспособным с моими таблицами? - PullRequest
0 голосов
/ 30 марта 2019

Я должен вставить сумму payment_amount отдельно для каждого имени пользователя из таблицы Платежи , total_money таблица total_balance Он должен вставляться автоматически каждый раз, когда новые velues вставляются в таблицу Платежи

Например: Пользователь "Джон" заполнил свой счет 2 раза 100 $ и 50 $, Всего на его счете 150 $

Пример в таблицах:

Таблица: Платежи

 ID      username     payment_amount    Status  
+-------+-------------+-------------+-----------+
|   1   |  John       |     100     | Complete  |
+-------+-------------+-------------+-----------+
|   2   |  John       |     50      | Complete  |
+-------+-------------+-------------+-----------+
|   3   |  Alex       |     100     | Complete  |
+-------+-------------+-------------+-----------+

Таблица:total_balance

 ID      username      total_money      
+-------+-------------+-------------+
|   1   |  John       |     150     | 
+-------+-------------+-------------+
|   2   |  Alex       |     100     |
+-------+-------------+-------------+

Здесь ответ на мою проблему, но я не могу настроить триггер как работоспособный с моими таблицами выше Здесь Решено 1-ответ

1 Ответ

0 голосов
/ 01 апреля 2019

Вы должны прочитать о триггерах mysql здесь https://dev.mysql.com/doc/refman/8.0/en/triggers.html. В этом вопросе код триггера тривиален.

drop table if exists t,t1;
create table t(id int auto_increment primary key,name varchar(20),balance int);
create table t1(id int auto_increment primary key, tid int, amount int);
drop trigger if exists t;
delimiter $$
create trigger t after insert on t1
for each row 
begin
    update t
        set balance = ifnull(balance,0) + new.amount
        where t.id = new.tid;
end $$

delimiter ;

insert into t (name) values ('john'),('paul');
insert into t1 (tid,amount) values
(1,10),(1,10),
(2,30);

select * from t1;
+----+------+--------+
| id | tid  | amount |
+----+------+--------+
|  1 |    1 |     10 |
|  2 |    1 |     10 |
|  3 |    2 |     30 |
+----+------+--------+
3 rows in set (0.00 sec)
select * from t;

+----+------+---------+
| id | name | balance |
+----+------+---------+
|  1 | john |      20 |
|  2 | paul |      30 |
+----+------+---------+
2 rows in set (0.00 sec)

Обратите внимание на использование полной проверки баланса и использование NEW. столбцы (см. руководство)

...