在其他表上插入带有条件检查的多行..只有单个查询

时间:2017-02-09 11:47:38

标签: php mysql multirow

表1:usermaster

uid uname
1    abc
2    xyz
3    pqr
4    def

表2:transactionmaster

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%。

2 个答案:

答案 0 :(得分:0)

这样的事情可以解决问题:

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

我认为tid字段是自动提取

编辑: 上面的查询是onehot。即它会系统地为所有具有“类型1”的uid创建“类型2”条目。换句话说,如果你多次使用它,你最终会得到重复的“类型2”条目。

如果您想仅为“类型1”INSERT“类型2”行还没有“类型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

oneshot查询将成为:

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

答案 1 :(得分:0)

要在每个月自动获得结果,您需要使用MySQL事件安排SQL查询。

这是参考 1)http://www.infotuts.com/schedule-sql-query-using-phpmyadmin-mysql-events/

从transactionmaster获取资金总和

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

简单!