Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Построить текстовую цепочку из дерева
|
|||
|---|---|---|---|
|
#18+
Приветствую всех. Есть древовидный справочник. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Эта структура осталась ещё от купленных давно компонент FibExTree. Менять не стал - удобно. получается справочник районов, т.е. примерно так: Беларусь->Минск->Боровцы. Таблица показывает пользователю только Боровцы. Есть процедура на клиенте, которая строит указанную цепочку в Calculated поле, но хотелсь бы на сервере и максимально быстрый алгоритм. В поле FULLPATH живёт вот такая цепочка "2775.141.2776.187.", т.е. цепочка из ID, 2775 - это корневой узел. Помогите, пожалуйста, построить на сервере, но чтобы максимально быстро и эффективно тоже с использованием вычисляемого поля. Просто я боюсь, что напишу процедуру далеко не самую быструю. Может быть уже есть готовые решения? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 09:17 |
|
||
|
Построить текстовую цепочку из дерева
|
|||
|---|---|---|---|
|
#18+
Забыл добавить: Firebird 2.5.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 09:17 |
|
||
|
Построить текстовую цепочку из дерева
|
|||
|---|---|---|---|
|
#18+
Индексы-то есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 09:21 |
|
||
|
Построить текстовую цепочку из дерева
|
|||
|---|---|---|---|
|
#18+
X11В поле FULLPATH живёт вот такая цепочка "2775.141.2776.187.", т.е. цепочка из ID, 2775 - это корневой узел. Забавно... Корневой узел сделан позже, чем ветви. Перетаскивать можно или id с потолка взяты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 09:22 |
|
||
|
Построить текстовую цепочку из дерева
|
|||
|---|---|---|---|
|
#18+
Получается, что мне нужно сделать путь (path) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 09:23 |
|
||
|
Построить текстовую цепочку из дерева
|
|||
|---|---|---|---|
|
#18+
wadmanX11В поле FULLPATH живёт вот такая цепочка "2775.141.2776.187.", т.е. цепочка из ID, 2775 - это корневой узел. Забавно... Корневой узел сделан позже, чем ветви. Перетаскивать можно или id с потолка взяты? в программе есть возможность переносить выделенные узлы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 09:26 |
|
||
|
Построить текстовую цепочку из дерева
|
|||
|---|---|---|---|
|
#18+
wadman, да, конечно, но это пока что неважно же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 09:26 |
|
||
|
Построить текстовую цепочку из дерева
|
|||
|---|---|---|---|
|
#18+
Вот процедура путь добывает, но по именам. Id = BigInt, varchar-ы тоже были доменными типами, переделал руками. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 09:27 |
|
||
|
Построить текстовую цепочку из дерева
|
|||
|---|---|---|---|
|
#18+
Сейчас пытаюсь вникнуть в CTE и рекурсивные запросы - надеюсь, на правильном пути. Но до сего момента не использовал и не имею представления об этом пока что ничего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 09:28 |
|
||
|
Построить текстовую цепочку из дерева
|
|||
|---|---|---|---|
|
#18+
Вот что у меня получилось Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. http://www.sqlbooks.ru/printarticle.aspx?part=02&file=sql200509 14053226 правда, не сам допёр ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 09:46 |
|
||
|
Построить текстовую цепочку из дерева
|
|||
|---|---|---|---|
|
#18+
X11, боюсь это далеко не самое эффективное решение. Ибо сначала будет построено дерево по всем записям, а только затем произойдёт фильтрация. Попробуй построить наоборот, т.е. от текущего узла к корню. Путь потом можно инвертировать функцией reverse ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 09:52 |
|
||
|
Построить текстовую цепочку из дерева
|
|||
|---|---|---|---|
|
#18+
Симонов ДенисПуть потом можно инвертировать функцией reverse Та ну нафиг. 123-456 после REVERSE() 654-321 будет ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 09:55 |
|
||
|
Построить текстовую цепочку из дерева
|
|||
|---|---|---|---|
|
#18+
Симонов ДенисX11, боюсь это далеко не самое эффективное решение. Ибо сначала будет построено дерево по всем записям, а только затем произойдёт фильтрация. Попробуй построить наоборот, т.е. от текущего узла к корню. Путь потом можно инвертировать функцией reverse так я и строю от текущего, т.е. последнего узла к корню Цепочка: "2775.141.2776.187.", 2775 - корень я строю от 187 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 09:57 |
|
||
|
Построить текстовую цепочку из дерева
|
|||
|---|---|---|---|
|
#18+
Симонов ДенисИбо сначала будет построено дерево по всем записям Код: sql 1. 2. 3. только по корневым ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 09:58 |
|
||
|
Построить текстовую цепочку из дерева
|
|||
|---|---|---|---|
|
#18+
DarkMaster, ммм... значит надо ещё подумать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 09:58 |
|
||
|
Построить текстовую цепочку из дерева
|
|||
|---|---|---|---|
|
#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. ничего не возвращает, т.е. процедура как бы не селективная получается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 10:00 |
|
||
|
Построить текстовую цепочку из дерева
|
|||
|---|---|---|---|
|
#18+
X11Вот что у меня получилось если нужно действительно нужно отфильтровать только от корня то вот так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. будет эффективней. Ибо в рекурсивные запросы предикаты не проталкиваются ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 10:08 |
|
||
|
Построить текстовую цепочку из дерева
|
|||
|---|---|---|---|
|
#18+
Симонов Денисесли нужно действительно нужно отфильтровать только от корня то вот так нет, мне надо не от корня, а наоборот - от указанного текущего узла, и вверх до корня ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 10:13 |
|
||
|
Построить текстовую цепочку из дерева
|
|||
|---|---|---|---|
|
#18+
и этот запрос пустой Код: sql 1. 2. 3. т.к. таких записей просто нет в таблице ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 10:14 |
|
||
|
Построить текстовую цепочку из дерева
|
|||
|---|---|---|---|
|
#18+
чтобы легче было представить: "ХАРЬКОВ>Город>САЛТОВКА>524м/р" вот код Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 10:19 |
|
||
|
Построить текстовую цепочку из дерева
|
|||
|---|---|---|---|
|
#18+
X11, ну тогда надо разворачивать построение дерева. Я же говорю предикаты не проталкиваются. Будет построено дерево целиком и только потом к нему будет прилеплен фильтр. Т.е. по хорошему должно быть как-то так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 10:26 |
|
||
|
Построить текстовую цепочку из дерева
|
|||
|---|---|---|---|
|
#18+
wadman, Ваш код вызывает Arithmetic overflow SQL Код: 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. цепочка небольшая - 2-3 узла, длина поля name - 20 символов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 10:27 |
|
||
|
Построить текстовую цепочку из дерева
|
|||
|---|---|---|---|
|
#18+
Симонов Денис, Код: sql 1. копипаста от другого запроса должно быть так Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 10:28 |
|
||
|
Построить текстовую цепочку из дерева
|
|||
|---|---|---|---|
|
#18+
Симонов Денис Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. твой код с ошибками Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. и в результате вместо цепочки выдаёт только название текущего узла, где ID = 187 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 10:31 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38945849&tid=1562878]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
160ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 274ms |

| 0 / 0 |
