php – 从节点树中获取总和

我正在学习PHP.
我有这个结构

company 1 - $10| all $50
-company 1.1 - $10| all $20
--company 1.1.1 - 10$| all $10
-company 1.2 - $20| all $20

每家公司可能有几家子公司,而且可能只有一家公司.每家公司都有钱.
所有公司都有Allmoney – 他所有儿童公司的钱.

MysqL这个结构就像这样

id|parent_id|name|money|allmoney
1| 0| company 1| 10|###
2| 1| company 1.1|10 |###
3| 2| company 1.1.1|10 |###
4| 1| company 1.2|10 |###

那么,我如何计算PHP中每家公司的allmoney?我现在,需要使用递归,但我尝试,没有什么不可能发生.
SELECT,UPDATE和其他命令MysqL – 我知道,请帮我用PHP.
我写的是这样的:

function updatemoney($id)
    {
        $data = CS50::query("SELECT ...", $id);
        $allmoney = 0;

        if(count($data) > 0)
        {
            foreach($data as $row)
            {

                $allmoney += $row["cash"];
               //somewhere this, maybe need ubdate my db 
                $allmoney += updatemoney($row["id"]);
            }
        }
        else return 0;
    }

非常感谢你

解决方法:

LTREE

你几乎走在正确的轨道上.您几乎偶然发现了将Lierachial数据存储在数据库中的“LTREE”系统.你只需要稍加修改即可.就这样.

您的表格可能如下所示:

CREATE TABLE Table1
    (`id` int, `parent_id` int, `name` varchar(13),
     `path` char(10),
     `money` int)
;

您的数据可能如下所示.

(1, 0, 'company 1', '1', 10),
(2, 1, 'child 1', '1.1', 10),
(3, 2, 'child 2', '1.1.1', 10),
(4, 1, 'child 3', '1.2', 10,),
(4, 1, 'company 2', '2', 10),
(4, 1, 'child 2.1', '2.1', 10)

路径列有助于识别哪家公司是另一家公司的子公司.请注意,您实际上不需要拥有allmoney列.这是动态生成的.

你如何找到属于第一家公司的所有资金?

select sum(money) from Table1 where path >= '1' and path < '2'

请注意,在我们创建的结构中,child1是child2的父级.那么我们如何为child1找到allmoney呢?

select sum(money) from Table1 where path >= '1.1' and path < '1.2'

只有一个查询,没有递归.

MPTT

获取分层数据的另一种流行方法是使用Modified Pre Order Tree Traversal.多年来在Sitepoint上发表了一篇很好的文章,解释了如何通过大量示例代码完成这项工作.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...