Mysql Получение баланса из таблицы с использованием триггеров или функции mysql - PullRequest
1 голос
/ 19 апреля 2020

У меня есть следующая таблица:


CREATE TABLE `wallet` (
  `id` int(250) NOT NULL,
  `amount` int(250) NOT NULL,
  `type` varchar(250) NOT NULL,
  `pg_id` varchar(250) NOT NULL,
  `comments` varchar(250) DEFAULT NULL,
  `intrument_type` varchar(250) NOT NULL,
  `user_id` int(250) NOT NULL,
  `date` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `wallet` (`id`, `amount`, `type`, `pg_id`, `comments`, `intrument_type`, `user_id`, `date`) VALUES
(17, 50, 'CREDIT', 'xxxxq123', NULL, 'REFUND', 1, '2020-04-18'),
(18, 50, 'CREDIT', 'xxxxq123', NULL, 'REFUND', 1, '2020-04-18'),
(22, 100, 'DEBIT', 'NONE', '0', 'SERVICE_CHARGE', 1, '2020-04-19'),
(23, 100, 'DEBIT', 'NONE', '0', 'SERVICE_CHARGE', 1, '2020-04-19'),
(24, 100, 'DEBIT', 'NONE', '0', 'SERVICE_CHARGE', 1, '2020-04-19'),
(25, 100, 'DEBIT', 'NONE', '0', 'SERVICE_CHARGE', 1, '2020-04-19'),
(26, 100, 'DEBIT', 'NONE', '0', 'SERVICE_CHARGE', 1, '2020-04-19'),
(27, 110, 'DEBIT', 'NONE', '0', 'SERVICE_CHARGE', 1, '2020-04-19'),
(28, 100, 'DEBIT', 'NONE', '0', 'SERVICE_CHARGE', 1, '2020-04-19'),
(29, 100, 'DEBIT', 'NONE', '0', 'SERVICE_CHARGE', 1, '2020-04-19'),
(30, 100, 'DEBIT', 'NONE', '0', 'SERVICE_CHARGE', 1, '2020-04-19'),
(31, 100, 'DEBIT', 'NONE', '0', 'SERVICE_CHARGE', 1, '2020-04-19'),
(32, 100, 'DEBIT', 'NONE', '0', 'SERVICE_CHARGE', 1, '2020-04-19'),
(33, 100, 'DEBIT', 'NONE', '0', 'SERVICE_CHARGE', 1, '2020-04-19'),
(34, 100, 'DEBIT', 'NONE', '0', 'SERVICE_CHARGE', 1, '2020-04-19');

http://sqlfiddle.com/#! 9 / 196aff

Я хочу получить баланс из этой таблицы.

Если я использую один запрос для получения баланса каждый раз, когда пользователь хочет получить баланс, этот запрос будет проходить через все транзакции, что приведет к большой нагрузке на пользователя.

Вместо этого я хочу написать функцию или триггер, который будет возвращать баланс против идентификатора пользователя, как я могу это сделать?

1 Ответ

0 голосов
/ 19 апреля 2020

Исходя из вашего sqlfiddle, вы можете попробовать использовать условное агрегирование для типа

select sum(case when `type`=  'CREDIT' THEN amount else -amount end) balance
from wallet

http://sqlfiddle.com/#! 9 / 196aff / 4

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...