关于网友提出的“php+mysql 如果进行递归统计”问题疑问,本网通过在网上对“php+mysql 如果进行递归统计”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题:php+mysql 如果进行递归统计
描述:现在有张表结构大概是这样
id name parent_id score
1 aaa 0 10
2 bbb 1 15
3 ccc 2 20
4 ddd 1 5
5 eee 0 50
首先是统计 计算出不同name 的 socre值.计算规则是这样
比如 bbb 的 parent_id 为 1 ,那么 id 为1 的记录的 score值就需要 加上 bbb 的 score值
同理 ccc的 parent_id 为 2,那么 bbb的 score值实际上为 15+20=35
aaa的 score值就为 10+35+5=50
bbb 为 35
ccc 为20
ddd 为5
eee 为50
最后得到结果为
name socre
aaa 50
eee 50
bbb 35
ccc 20
ddd 5
如何根据上表的内容得到下面这个表的内容..
纯sql 好像搞不定...或者有没有效率高点的php代码实现也可以
解决方案1:以前好像看到过一个SQL,这是我的博客。http://www.sifangke.com/2012/05/mysql-child-from-parent/
希望你从这条SQL语句中受到启发。
解决方案2:先 查出所有的 最终子节点.. 也就是 id 不出现在 parent_id 内的记录
select * from table where id not in (select parent_id from table)
然后一级一级的查上去
解决方案3:mysql 的递归查询, 还不会.
解决方案4:这里面有个 递归嵌套..
ccc 的 pid 为2 即 bbb 那么,计算bbb 的 score值 就为 bbb的score+ccc的score值
而 bbb的 pid 为1 即 aaa 那么计算aaa 的score值 就为bbb的 socre值+aaa的score值
但注意:这里 bbb 的score值 来源于前面计算得出的score值,并不是表中存储的字段的值
解决方案5:你的描述很让人郁闷, 你想要的结果是不是 统计 pid 对应 的 name 值以及 score 总值.
如果是这样的话, 可以用一条 sql 获取.
select A.name , A.score+sum(B.score) from T A,T B where B.parent_id = A.id Group by A.id
以上介绍了“php+mysql 如果进行递归统计”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/1368982.html