Вставить несколько строк с проверкой условий в другой таблице .. только один запрос

Table1: usermaster

uid uname
1    abc
2    xyz
3    pqr
4    def

Таблица2: Мастер транзакций

tid uid amount type
1    1  100    1
2    2  500    1
2    2  500    2
3    1  350    1
3    1  150    2

введите в таблицу транзакций:

1 for capital
2 for interest(5% of total capital)

Теперь я хочу рассчитать interest от суммы капитала и процентов от стоимости капитала 5% каждый месяц.
Запрос должен быть передан: добавить запись интереса в transactionmaster таблица автоматически для обоих пользователей, которые имеют капитал.

Результат должен понравиться в transactionmaster Таблица.

tid uid amount type
1    1  100    1
2    2  500    1
3    1  600    1
4    1  35     2
5    2  25     2

Вот interest также считать автоматически 5%.

0

Решение

Чтобы получать результаты автоматически каждый месяц, вам нужно запланировать SQL-запрос, используя события MySQL.

Вот ссылка
1) http://www.infotuts.com/schedule-sql-query-using-phpmyadmin-mysql-events/

Получить сумму капитала от транзакции

select sum(amount) from transactionmaster where uid = 13 and type=1

Теперь посчитайте проценты

select sum(amount) * (5 / 100)  as interest from transactionmaster where uid=13 and type=1

просто!

0

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

Нечто подобное должно сработать:

INSERT INTO transactionmaster (uid, amount, type)
SELECT uid, ((SUM(amount) / 100) * 5), 2
FROM transactionmaster
WHERE type = 1
GROUP BY uid

Я предположил, что tid поле является автокрементом


Редактировать:
Вышеприведенный запрос является одним выстрелом. то есть он будет систематически создавать записи типа 2 для всех идентификаторов пользователей типа 1. Другими словами, если вы используете его несколько раз, вы получите дубликаты записей типа 2.

Если вы хотите вставить строки типа 2 только для строк типа 1, у которых еще нет строк типа 2, вы можете сделать это:

INSERT INTO transactionmaster (uid, amount, type)
SELECT t1.uid, ((SUM(t1.amount) / 100) * 5), 2
FROM transactionmaster t1
LEFT JOIN transactionmaster t2 ON t1.uid=t2.uid AND t1.type=1 AND t2.type=2
WHERE t2.tid IS NULL
GROUP BY t1.uid

Отредактируйте 2, чтобы ответить на ваш комментарий.

Предположим, вы создали таблицу intrustmaster, имеющую такую ​​структуру:

loweramt | higheramt | perc
---------------------------
100      | 199       | 5
200      | 399       | 4

Запрос с одним выстрелом станет таким:

INSERT INTO transactionmaster (uid, amount, type)
SELECT T.uid, ((totamt /100) * i.perc), 2
FROM
(
SELECT uid, (SUM(amount) / 100) as totamt
FROM transactionmaster
WHERE type = 1
GROUP BY uid
) T
INNER JOIN intrustmaster I
ON t.totamt BETWEEN i.loweramt AND i.higheramt
0

По вопросам рекламы [email protected]