|
Иерархия и суммирование полей
|
|||
---|---|---|---|
#18+
Доброго времени суток. Проектирую базу для учёта продаж. Есть иерархия торговых точек по типу родитель-потомок (id, name, pid) и в отдельной таблице хранятся записи о продажах по датам (по одной записи для одной ТТ в день). Структура таблицы продаж - tt_id, amount, date. Записи записываются в БД только на нижнем уровне иерархии, т.е. для каждой ТТ отдельно записываются значения, и потом при выборке из БД суммируются на уровне родителя. Пример: Есть 5 ТТ и по каждой ТТ в БД имеется запись о продажах. Эти 5 ТТ входят в определённую группу, например Группа1. Когда я делаю выборку из БД, я суммирую записи из БД и показываю пользователю общую сумму продаж по Группе1 и так далее до верхнего уровня иерархии. Возможно есть более правильный способ хранения данных, если да, то просьба подсказать. Использую СУБД PostgreSQL, сразу говорю, что с этой СУБД знакомство начал недавно, до этого работал с MySQL. Задача стоит следующая: Сейчас у меня выполняется очень много запросов к БД, что не есть хорошо. Хочу как то оптимизировать выборку, чтобы выполнялось как можно меньше запросов. Поиск в гугле вывел на WITH RECURSIVE. В итоге получилось выбрать иерархию и суммировать данные одним запросом, но только на нижнем уровне. На уровнях выше суммировать не получается, никак не могу разобраться как именно это можно сделать без циклических обращений к БД из PHP. Надеюсь на Вашу помощь, укажите в каком направлении копать, реальный пример был бы шикарным подарком. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2017, 15:37 |
|
Иерархия и суммирование полей
|
|||
---|---|---|---|
#18+
Код: 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. 30. 31. 32.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2017, 09:32 |
|
Иерархия и суммирование полей
|
|||
---|---|---|---|
#18+
LeXa NalBat, спасибо. всё работает. ещё один вопрос: а как добавить условие, чтобы отбирались только те записи, которые подчиняются какому то конкретному родителю. сейчас отбираются все записи из бд, а как например вывести только тех, кто подчиняется id=1 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2017, 11:27 |
|
Иерархия и суммирование полей
|
|||
---|---|---|---|
#18+
drboboevтех, кто подчиняется id=1 ? Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2017, 20:38 |
|
Иерархия и суммирование полей
|
|||
---|---|---|---|
#18+
ora601drboboevтех, кто подчиняется id=1 ? Код: plsql 1.
Данных не найдено. :-( ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2017, 09:21 |
|
Иерархия и суммирование полей
|
|||
---|---|---|---|
#18+
Код: 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. 30. 31. 32. 33. 34. 35. 36.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2017, 11:26 |
|
Иерархия и суммирование полей
|
|||
---|---|---|---|
#18+
LeXa NalBat, Всё работает отлично, за исключением одного момента - запрос не выбирает тех, у кого нет значений. Попытался сам, но в итоге перестаёт работать условие выборки по конкретному id. Можно ли добавить те id у которых нет значений в бд? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2017, 11:17 |
|
Иерархия и суммирование полей
|
|||
---|---|---|---|
#18+
Код: 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. 30. 31. 32. 33. 34. 35. 36. 37. 38.
Всего лишь использовать OUTER JOIN? 7.2.1.1. Joined Tables ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2017, 12:18 |
|
|
start [/forum/topic.php?fid=53&fpage=78&tid=1996690]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 314ms |
total: | 442ms |
0 / 0 |