|
Нужна помощь с рекурсией
|
|||
---|---|---|---|
#18+
Здравствуйте, есть таблица со связанными ИД, пытаюсь через рекурсию связать их в группы. Но что то не могу правильно написать условие в запросе, что бы уйти от зацикливания и получения групп Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
В результате хотелось бы получить Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2021, 09:35 |
|
Нужна помощь с рекурсией
|
|||
---|---|---|---|
#18+
Microsoft SQL Server 2012 - 11.0.2100.60 (X64) Feb 10 2012 19:39:15 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2021, 09:45 |
|
Нужна помощь с рекурсией
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4.
Получается что указатель один ссылается на указатель 2, указатель 2 ссылается на указатель 1, который в свою очередь ссылается на указатель 2, который ссылается на указатель 1.... Да, тут будет бесконечное зацикливание, т.к. оно предусмотрено исходными данными. Либо убери вторую строчку из VALUES либо подумай над тем, как ещё ограничить вложенность. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2021, 09:52 |
|
Нужна помощь с рекурсией
|
|||
---|---|---|---|
#18+
Агрох, Если убрать вторую строку в VALUE, и запустить указав @ID =2 то ни чего не найдется. если дописать условие Код: sql 1.
то получим результат где с 1 мы не вышли на 3: 1 2 4 2 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2021, 10:45 |
|
Нужна помощь с рекурсией
|
|||
---|---|---|---|
#18+
Ramis, что такое @ID? Если тебе надо вывести всю группу, даже если родитель ссылается на несуществующий объект - по которому ты и ищещь, то надо в условии прописывать что то типа: Id_1 = @ID or Id_2 = @ID. Ещё раз, сейчас исходные данные сами по себе предполагают бесконечное зацикливание. Да ещё и, насколько я понял, ты роль Id_1 и Id_2 просто меняешь местами, т.к. по структуре выглядит всё так, что Id_2 - идентификатор элемента, а Id_1 - идентификатор родителя. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2021, 11:13 |
|
Нужна помощь с рекурсией
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2021, 11:14 |
|
Нужна помощь с рекурсией
|
|||
---|---|---|---|
#18+
invm, Спасибо большое. А как нибудь еще группы можно вывести? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2021, 12:00 |
|
Нужна помощь с рекурсией
|
|||
---|---|---|---|
#18+
Ramis А как нибудь еще группы можно вывести? Код: 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.
GrId_1Id_2A12A13A14A24A42B56B510B67C89 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2021, 12:12 |
|
Нужна помощь с рекурсией
|
|||
---|---|---|---|
#18+
court, спасибо, но если запускать по определенному @ID, то отрабатывает не верно ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2021, 13:09 |
|
Нужна помощь с рекурсией
|
|||
---|---|---|---|
#18+
Ramis court, спасибо, но если запускать по определенному @ID, то отрабатывает не верно если запускать "по определенному @ID", то непонятно про какие группы ты рассказываешь, так как это и будет одна группа (граф) пс я делал исходя из предположения, что у тебя несколько ненаправленных графов, так как выглядят исх.данные в сабже и нужно разделить точки дуги по этим графам (группам) - так как выглядит "желаемый результат" ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2021, 11:00 |
|
|
start [/forum/topic.php?fid=46&msg=40052269&tid=1684973]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 317ms |
total: | 459ms |
0 / 0 |