|
Nested Set суммирование по полю
|
|||
---|---|---|---|
#18+
Добрый день. Имеется дерево в БД по модели Nested Sets. Вывожу дерево, в другой таблице записаны значения связь один-ко-многим. Значения вносятся каждый день по нижнему уровню дерева. Нужно сделать запрос, который получит из БД всё дерево и просуммирует на родителя все значения потомков. Пример: Родитель 1: 25шт (5 + 15 + 5) Потомок 1.1: 5шт Потомок 1.2: 15шт Потомок 1:3: 5шт Родитель 2: 45шт (20 + 25) Потомок 2.1: 20шт (5 + 15) Потомок 2.1.1: 5шт Потомок 2.1.2: 15шт Потомок 2.2: 25шт Таких уровней может быть до 10 и узлов дерева будет большое множество. Т.е. нужно оптимальное решение, чтобы запрос выполнялся максимально быстро. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2017, 12:30 |
|
Nested Set суммирование по полю
|
|||
---|---|---|---|
#18+
Кажется, Вы уже задавали этот вопрос. Или задача отличается? http://www.sql.ru/forum/1250412/ierarhiya-i-summirovanie-poley ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2017, 14:44 |
|
Nested Set суммирование по полю
|
|||
---|---|---|---|
#18+
LeXa NalBat, Да, задавал, но изначально структура базы была родитель->потомок, а сейчас использую модель Nested Sets. Т.е. изначальная задача та же, но подход другой, а значит и решение уже будет другое. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 08:37 |
|
Nested Set суммирование по полю
|
|||
---|---|---|---|
#18+
drboboev, приведите ваш вариант. как признак того, что вы не балду тут пинаете. в лоб, можно написать не самый оптимальный вариант, с суммой, выглядящей как коррелят из агрегата "всех потомков ветки" , подвешенной к каждому узлу "всего дерева" оба запроса есть тут: см. http://doc.prototypes.ru/database/trees/nestedsets/theory/use/ агрегат от второго напишете руками очевидно, что решение не слишком оптимальное. (многократно суммируете одно и то же) лениво разбираццо, но вот тут, у Целко кажеццо есть что--то вам нужное http://www.ibase.ru/files/articles/programming/dbmstrees/sqltrees.html автор3. Add a GROUP BY and aggregate functions to these basic queries and you have hierarchical reports. For example, the total salaries that each employee controls: Код: sql 1. 2. 3. 4. 5. 6.
думаю, столь же не оптимальное. можно пуститься в настоящую рекурсию, (хранимкой, объявив результат стейбл), так и итеративную псевдорекурсию SQL [with recursive ] , стартуя от конечных ветвей==листьев. (все те ветви, у которых right=left+1) но браться делать что--то за вас пока лениво ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 12:27 |
|
Nested Set суммирование по полю
|
|||
---|---|---|---|
#18+
drboboevLeXa NalBat, Да, задавал, но изначально структура базы была родитель->потомок, а сейчас использую модель Nested Sets. Т.е. изначальная задача та же, но подход другой, а значит и решение уже будет другое.Так для Nested Sets очень просто получается - без рекурсии, джоин по совпадению подстроки. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2017, 11:01 |
|
Nested Set суммирование по полю
|
|||
---|---|---|---|
#18+
LeXa NalBatТак для Nested Sets очень просто получается - без рекурсии, джоин по совпадению подстроки. Код: sql 1. 2. 3. 4.
Trees in SQL: Nested Sets and Materialized Path ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2017, 11:20 |
|
|
start [/forum/topic.php?fid=53&msg=39468400&tid=1996465]: |
0ms |
get settings: |
11ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 17ms |
total: | 154ms |
0 / 0 |