1

我需要找到我有用户表的 unilevel mlm 树的团队总数

+-------+-------+-----------+
| id    | fname | parent_id |
+=======+=======+===========+
| sk001 | aa    | null      |
+-------+-------+-----------+
| sk002 | ss    | ssk001    |
+-------+-------+-----------+
| sk003 | dd    | sk001     |
+-------+-------+-----------+
| sk004 | ff    | sk002     |
+-------+-------+-----------+
| sk005 | gg    | sk002     |
+-------+-------+-----------+
| sk006 | hh    | sk005     |
+-------+-------+-----------+
| sk007 | jj    | sk006     |
+-------+-------+-----------+
| sk008 | kk    | sk006     |
+-------+-------+-----------+
| sk009 | ll    | sk004     |
+-------+-------+-----------+
| sk010 | mm    | sk005     |
+-------+-------+-----------+

我有这样的 invoice_order 表

+-------+-------+-----------+--------+
| id    | fname | parent_id | amount |
+=======+=======+===========+========+
| sk001 | aa    | null      | 100    |
+-------+-------+-----------+--------+
| sk002 | ss    | ssk001    | 400    |
+-------+-------+-----------+--------+
| sk002 | dd    | sk001     | 225    |
+-------+-------+-----------+--------+
| sk004 | ff    | sk002     | 50     |
+-------+-------+-----------+--------+
| sk005 | gg    | sk002     | 59     |
+-------+-------+-----------+--------+
| sk006 | hh    | sk005     | 77     |
+-------+-------+-----------+--------+
| sk007 | jj    | sk006     | 89     |
+-------+-------+-----------+--------+
| sk004 | ff    | sk002     | 87     |
+-------+-------+-----------+--------+
| sk009 | ll    | sk004     | 45     |
+-------+-------+-----------+--------+
| sk010 | mm    | sk005     | 56     |
+-------+-------+-----------+--------+

在这里,我必须计算 Id 的个人总数和团队总数,例如(树):

             sk001 
                |
                |--sk002
                |     |--sk004
                |     |    |--sk009
                |     |    |--xy
                |     |
                |     |--sk005
                |
                |--sk003  

例如:Team total ofsk002应该包含团队中个人的总购买金额(sk004,sk009,xy)

我刚刚尝试过这样的事情:

SELECT  (SUM(amount))/2 as indteamtotal 
                                          from    (SELECT * from invoice_order
                                                   order by id, parent_id) products_sorted,
                                                  (SELECT @pv := 'sk002') initialisation
                                          where   find_in_set(parent_id, @pv) > 0
                                          and     length(@pv := concat(@pv, ',', id)) order by parent_id asc

但我没有得到正确的团队总数有没有可能使用 mysql 程序

4

1 回答 1

0

如果你有 MySQL 8+,你可以使用 CTE

with recursive tree as (
 select id from invoice_order where id = 'sk002'
 union
 select i.id from invoice_order i join tree on tree.id = i.parent_id
)  
select sum(amount) from invoice_order where id in (select id from tree);

链接到小提琴

于 2020-10-15T13:18:05.160 回答