我有两个表,一个存储数据的子级和父级,其他路径和后代

+----------+------------+-----------+
| userid   |    parent  |    price  |
+----------+------------+------------
| 1        |    null    |      20   |
| 2        |      1     |      20   |
| 3        |      1     |      20   |
| 4        |      2     |      20   |
| 5        |      2     |      20   |
| 6        |      3     |      20   |
| 7        |      4     |      20   |
+----------+------------+-----------+


我需要获取所有具有父代1的用户ID,然后获取其他表中的子代,并按用户ID总价分组

+-------------+---------------+-------------+
| ancestor_id | descendant_id | path_length |
+-------------+---------------+-------------+
|           1 |             1 |           0 |
|           1 |             2 |           1 |
|           1 |             3 |           1 |
|           1 |             4 |           2 |
|           1 |             5 |           2 |
|           1 |             6 |           2 |
|           1 |             7 |           3 |
|           2 |             2 |           0 |
|           2 |             4 |           1 |
|           2 |             5 |           1 |
|           2 |             7 |           2 |
|           3 |             3 |           0 |
|           3 |             6 |           1 |
|           4 |             4 |           0 |
|           4 |             7 |           1 |
|           5 |             5 |           0 |
|           6 |             6 |           0 |
|           7 |             7 |           0 |
+-------------+---------------+-------------+


我已经查询了所有孩子的总和

select
sum(b.price)

from webineh_prefix_nodes_paths_tmp a

    join webineh_prefix_nodes_tmp b on (b.userid = a.descendant_id)

where a.ancestor_id = 1


这项工作很好,但父母总和为1

我需要显示直接儿童的波纹管结果(2,3)

 +----------+------------+-
    | userid   |    total   |
    +----------+------------+
    | 2        |    80      |
    | 3        |    40      |
    +----------+------------+


同样在创建sqlfiddle我的问题http://sqlfiddle.com/#!9/9415ed/2

最佳答案

尝试这个;)

select ancestor_id as userid, sum(b.price) as total
from webineh_prefix_nodes_paths_tmp a
join webineh_prefix_nodes_tmp b
on b.userid = a.descendant_id
where a.ancestor_id in (select userid from webineh_prefix_nodes_tmp where parent = 1)
group by ancestor_id


SQLFiddle Demo

已编辑

select ancestor_id as userid, sum(b.price) as total
from webineh_prefix_nodes_paths_tmp a
join webineh_prefix_nodes_tmp b
on b.userid = a.descendant_id
inner join webineh_prefix_nodes_tmp c
on a.ancestor_id = c.userid
and c.parent = 1
group by ancestor_id


SQLFiddle Demo

关于mysql - 其他表mysql中子项的总价,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38209563/

10-13 02:47