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上发表了一篇很好的文章,解释了如何通过大量示例代码完成这项工作.