как взять общее количество команды для одноуровневого дерева млм

Мне нужно найти общее количество команды для одноуровневого дерева млм. У меня есть таблица пользователей, как это

+-------+-------+-----------+
| 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     |
+-------+-------+-----------+--------+

Здесь я должен рассчитать личную сумму и общую сумму идентификаторов команды, пример (дерево):

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

например: Общая сумма команды sk002 должна содержать общую сумму покупки отдельного лица в команде (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


person Sam Leumas    schedule 15.10.2020    source источник
comment
Почему это помечено php? В вашем вопросе нет PHP.   -  person trincot    schedule 16.10.2020


Ответы (1)


Вы можете использовать CTE, если у вас есть MySQL 8+

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);

Ссылка на скрипту

person MBeale    schedule 15.10.2020
comment
для mysql 5+ Что я могу сделать @MBeale - person Sam Leumas; 29.10.2020