#mysql #tree #treeview #mlm
#mysql #дерево #просмотр дерева #mlm
Вопрос:
Мне нужно найти общее количество команд для одноуровневого дерева 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 |
------- ------- ----------- --------
Здесь я должен рассчитать личное общее количество и общее количество идентификаторов команды,
пример (дерево):
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
Комментарии:
1. Почему это помечено
php
? В вашем вопросе нет PHP.
Ответ №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);
Ссылка на скрипку
Комментарии:
1. что я могу сделать для mysql 5 @MBeale