Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
18.04.2019, 14:30
|
|||
---|---|---|---|
Найти родителя по связям (иерархия) |
|||
#18+
Господа, проблема следующая. Есть таблица RECS с записями где содержаться guid'ы: idguid1fldkjs2lkgfjg3fpsdfk4fdsfkf5lmfsd Есть таблица LINKS , содержащая ссылки на выше описанную таблицу RECS : id_ref1id_ref2type11203040510521531541 id_ref1 - FK1 на RECS .ID (not null) id_ref2 - FK2 на RECS .ID (может быть пустым) type - тип ссылки: 0 ссылка на запись нижнего уровня, 1 ссылка на запись верхнего уровня По примеру, получается такая иерархия: 3 уровень: RECS .ID = 2,3,4 2 уровень: RECS .ID = 5 1 уровень: RECS .ID = 1 Задача состоит в том, чтобы по любой записи из таблицы RECS (т.е. я могу указать любой ID = 1, 2, 3, 4, 5 и т.д.) найти все связные элементы, используя LINKS , и проставить им GUID от записи 1-го уровня. Т.е.: idguidmain_guid1fldkjsfldkjs2lkgfjgfldkjs3fpsdfkfldkjs4fdsfkffldkjs5lmfsdfldkjs На ум приходит ужасная конструкция вида: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Как можно избавиться от этого монстра или же как отрубить ему пару голов? По форуму лазил долго, но ключа не распознал и прямого ответа не нашел. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
18.04.2019, 15:55
|
|||
---|---|---|---|
|
|||
Найти родителя по связям (иерархия) |
|||
#18+
Код: plsql 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
18.04.2019, 17:01
|
|||
---|---|---|---|
Найти родителя по связям (иерархия) |
|||
#18+
rpovarov, Спасибо большое за предоставленный вариант, но решение немножко не подходит, Во-первых, у меня в RECS большой набор данных и я не хочу полностью его сканить, а хочу задать ID и найти все записи связанные с этим ID. И их уже идентифицировать. Во-вторых, я конечно сам виноват, не уточнил, у меня может быть более одного "корня в дереве", тогда следует выбрать 1 из них по минимальному ID. Также у меня может не быть записей в LINKS вообще. Либо быть всего 1 строка, связывающая 2 записи из RECS Вот что сам нагородил, даже как-то работает, но выглядит ужасно: Код: plsql 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. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
19.04.2019, 11:30
|
|||
---|---|---|---|
|
|||
Найти родителя по связям (иерархия) |
|||
#18+
Adtain, автору меня в RECS большой набор данных и я не хочу полностью его сканить, а хочу задать ID и найти все записи связанные с этим ID. И их уже идентифицировать. Не проблема, сделайте главным подселект из LINKS (убрав where parent_id is null), а в RECS ищите только найденный путь. автору меня может быть более одного "корня в дереве", А что делает их корнями? Почему тогда корнем не является тот узел, из которого они выходят? авторТакже у меня может не быть записей в LINKS вообще И как тогда вы собираетесь искать корни и листья? авторЛибо быть всего 1 строка, связывающая 2 записи из RECS По какому критерию одну из них назначают корнем? Показывайте спорные варианты входных данных (в виде with ..., как у меня), описывайте полные правила. Иначе помогать желания не возникает. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=52&mobile=1&tid=1882569]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 285ms |
total: | 427ms |
0 / 0 |