Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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_Math_Currency - Fatal编程技术网

Php 更新行,直到总和匹配为止?

Php 更新行,直到总和匹配为止?,php,mysql,math,currency,Php,Mysql,Math,Currency,我有一张看起来像的桌子 id 类型:汽车公司内部 注释:唯一id 插入值自动有限公司 日期获得 类型:日期时间 备注:获得货币的日期 插入值:当前日期/时间 AMNTG 类型:浮动 注释:获得的货币金额 插入值:获得的值(例如0.25) amntUsed 类型:浮动 注释:使用部分值时,此列将更新 插入值:0 uuid 类型:uuid 备注:用户uuid 插入的值:(一个uuid) 因此,一些示例行(对于单个用户)将是 现在我的问题是关于逻辑: 基本上,我有一个给定uuid和数量的函数,然后该函

我有一张看起来像的桌子

id
类型:汽车公司内部
注释:唯一id
插入值自动有限公司

日期获得
类型:日期时间
备注:获得货币的日期
插入值:当前日期/时间

AMNTG
类型:浮动
注释:获得的货币金额
插入值:获得的值(例如0.25)

amntUsed
类型:浮动
注释:使用部分值时,此列将更新
插入值:0

uuid
类型:uuid
备注:用户uuid
插入的值:(一个uuid)

因此,一些示例行(对于单个用户)将是

现在我的问题是关于逻辑:

基本上,我有一个给定uuid和数量的函数,然后该函数必须从最早的开始执行,并更新使用的值,直到满足给定的数量

e、 g.如果函数被赋予
6.25
[uuid]

这张桌子看起来像

1 | 2010-07-30 00:00:00 | 0.25 | 0.25 | [uuid] //still need to use 6.20  
2 | 2010-08-12 00:00:00 | 1.75 | 1.75 | [uuid] //still need to use 4.45 
3 | 2010-08-17 00:00:00 | 8.25 | 4.45 | [uuid] //we now have 3.80 remaining 
4 | 2010-09-15 00:00:00 | 0.05 | 0.00 | [uuid] //this row is untouched 
但对于如何有效地完成这项工作,我完全一无所知。

这对你有用吗?(更新版版本)


对我来说,这类似于一个事务/日志表,如果我面临同样的问题,我可能会重新建模,并拥有另一个包含整体“余额”或类似解决方案的表。当然没有太多帮助。我们实际上也有一个交易日志,但货币在获得后6个月到期,因此我们还需要保存这样的日志。。而且,由于用户不必一次使用整块货币,这就变得更加困难。。
1 | 2010-07-30 00:00:00 | 0.25 | 0.25 | [uuid] //still need to use 6.20  
2 | 2010-08-12 00:00:00 | 1.75 | 1.75 | [uuid] //still need to use 4.45 
3 | 2010-08-17 00:00:00 | 8.25 | 4.45 | [uuid] //we now have 3.80 remaining 
4 | 2010-09-15 00:00:00 | 0.05 | 0.00 | [uuid] //this row is untouched 
UPDATE table1 t3
INNER JOIN
(
SELECT t1.id, IFNULL(SUM(t2.amntGained),0) as total // 0 for the smallest date
FROM table1 t1
LEFT JOIN table1 t2 ON (t2.uuid = t1.uuid AND t2.dateGained < t1.dateGained)
// LEFT JOIN,not INNER because "<" is used for joining, 
WHERE uuid = 1
GROUP BY t1.id
)X  ON (X.id=t3.id)
SET t3.amntUsed = IF(X.total+t3.amntGained <=6.25, t3.amntGained, 
 IF(6.25-X.total>0, 6.25-X.total,0))
WHERE t3.uuid=1
id - total - amntGained - X.total+t3.amntGained - 6.25-X.total>0 - new.amntUsed
1  - 0     - 0.25      - 0.25                   - true             0.25
2  - 0.25  - 1.75      - 2                      - true             1.75
3  - 2     - 8.25      - 10.25                  - true             6.25-2 = 4.25
4  - 10.25 - 0.05      - 10.30                  - false            0