Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在其他表上插入多行并进行条件检查。。只有一个查询_Php_Mysql_Multirow - Fatal编程技术网

Php 在其他表上插入多行并进行条件检查。。只有一个查询

Php 在其他表上插入多行并进行条件检查。。只有一个查询,php,mysql,multirow,Php,Mysql,Multirow,表1:usermaster uid uname 1 abc 2 xyz 3 pqr 4 def tid uid amount type 1 1 100 1 2 2 500 1 2 2 500 2 3 1 350 1 3 1 150 2 表2:transactionmaster uid uname 1 abc 2 xyz 3 pqr 4 def tid uid amount

表1:usermaster

uid uname
1    abc
2    xyz
3    pqr
4    def
tid uid amount type
1    1  100    1
2    2  500    1
2    2  500    2
3    1  350    1
3    1  150    2
表2:transactionmaster

uid uname
1    abc
2    xyz
3    pqr
4    def
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)
现在,我想每月计算资本金额的
利息
,以及资本价值的ad利息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

这里的
利息
也自动计算5%

像这样的事情应该可以做到:

INSERT INTO transactionmaster (uid, amount, type)
SELECT uid, ((SUM(amount) / 100) * 5), 2
FROM transactionmaster
WHERE type = 1 
GROUP BY uid
我假设
tid
字段是一个autoicrement


编辑: 上面的查询是一次性的。ie将系统地为所有具有“类型1”的uid创建“类型2”条目。换句话说,如果您多次使用它,您将得到重复的“Type2”条目

如果只想为还没有“类型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
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

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

这是参考资料 (一)

从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

简单

请看,让我在此建议一件事,如果每个阶段的intrust不同,那么如何可能,假设我制作一个表intrustmaster,有3个板,100-200 intrust为5%,200-400 intrust为4%,500-1000 5%,那么需要做什么更改?100-200和200-400是uid的总量?是的,uid的总量,intrustmaster字段(id,min,max,intrust_rate)。回答了数据(1100200,5)(2201400,4)(3401500,5),但这样的聊天并不是问答的正确方式。因此,如果您还有其他问题,请编辑您的答案并添加详细信息,或者创建一个包含更具体元素的新问题。