Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Дерево сборки
|
|||
|---|---|---|---|
|
#18+
Добрый день. Для работы требуется разворачивать блоки, в которые входят сборки, а в них подсборки и т.д. Вот только возникла проблема, что данный уровень запроса мне не по зубам. Сейчас это делается через спец. функцию, но она одноуровневая и решение данной задачи занимает несколько дней. Надеюсь на Вашу помощь. Требуемая информация хранится в одной таблице ever. В ней десятки столбцов и около 1 млн. строк, но требуемые данные находятся в 2 столбцах: ever_parim и ever_detim Для примера. Что имеем: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Что требуется получить Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2018, 14:57 |
|
||
|
Дерево сборки
|
|||
|---|---|---|---|
|
#18+
Экстрасексы и телепузики последнее время совсем повывелись. Придется те напрячься объяснить. Каким образом из первого следует второе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2018, 15:34 |
|
||
|
Дерево сборки
|
|||
|---|---|---|---|
|
#18+
aleks222, похоже на обход дерева в глубину ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2018, 15:38 |
|
||
|
Дерево сборки
|
|||
|---|---|---|---|
|
#18+
Посетительaleks222, похоже на обход дерева в глубину А дерево-то где? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2018, 15:53 |
|
||
|
Дерево сборки
|
|||
|---|---|---|---|
|
#18+
Посетительaleks222, похоже на обход дерева в глубину Так, телепузики подтянулись! Ты не скромничай - ты все выкладывай. Как есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2018, 15:54 |
|
||
|
Дерево сборки
|
|||
|---|---|---|---|
|
#18+
aleks222, значит так. сначала было слово Поиск в глубину строка - ребро, ever_parim,ever_detim - пары вершин. обход в порядке lineno начинай с узла, который есть только в parim ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2018, 16:07 |
|
||
|
Дерево сборки
|
|||
|---|---|---|---|
|
#18+
aleks222, Есть головное изделие, допустим ТРИМ.468369.003-01 и мы делаем запрос Код: sql 1. 2. 3. Получаем все изделия которые в него входят (здесь только часть) Код: plaintext 1. 2. 3. 4. 5. Теперь разворачиваем первое изделие которое в него входит Код: sql 1. 2. 3. Получаем Код: plaintext 1. 2. 3. Дальше Код: sql 1. 2. 3. Код: plaintext 1. 2. 3. Код: sql 1. 2. 3. Код: plaintext И вот мы в конце А хотелось бы сразу получить Код: plaintext 1. 2. 3. 4. 5. и дальше разворачивать уже второе изделие, далее 3 и т.д. Потом мы добавим критерии отбора и это сократит выборку, но это если получится сделать такой запрос ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2018, 16:09 |
|
||
|
Дерево сборки
|
|||
|---|---|---|---|
|
#18+
aleks222 , и вообще из экстрасексов и телепузиков я бы предпочел первое ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2018, 16:11 |
|
||
|
Дерево сборки
|
|||
|---|---|---|---|
|
#18+
Bob2012aleks222, Есть головное изделие, допустим ТРИМ.468369.003-01 и мы делаем запрос select * from ever where ever_parim = 'ТРИМ.468369.003-01' Получаем все изделия которые в него входят (здесь только часть) ever_parim ever_lineno ever_ondate ever_detim ТРИМ.468369.003-01 10 1899-12-31 00:00:00.000 ТРИМ.301412.022-01 ТРИМ.468369.003-01 20 1899-12-31 00:00:00.000 ТРИМ.301412.023 ТРИМ.468369.003-01 30 1899-12-31 00:00:00.000 ТРИМ.321455.013-02 ТРИМ.468369.003-01 40 1899-12-31 00:00:00.000 6Д6.832.046 ТРИМ.468369.003-01 50 1899-12-31 00:00:00.000 6В8.840.031-01 Теперь разворачиваем первое изделие которое в него входит select * from ever where ever_parim ='ТРИМ.301412.022-01' Получаем ТРИМ.301412.022-01 10 1899-12-31 00:00:00.000 ТРИМ.687281.210 ТРИМ.301412.022-01 20 1899-12-31 00:00:00.000 ТРИМ.687281.211 ТРИМ.301412.022-01 30 1899-12-31 00:00:00.000 ТРИМ.687281.212 ТРИМ.301412.022-01 40 1899-12-31 00:00:00.000 ТРИМ.687281.213 Дальше select * from ever where ever_parim ='ТРИМ.687281.210' ТРИМ.687281.210 20 1899-12-31 00:00:00.000 6Д8.128.041-05 ТРИМ.687281.210 30 1899-12-31 00:00:00.000 2-0,8-2,5-7Л6307 ТРИМ.687281.210 40 1899-12-31 00:00:00.000 6212746747 ТРИМ.687281.210 50 1899-12-31 00:00:00.000 6349555475 select * from ever where ever_parim ='6Д8.128.041-05' 6Д8.128.041-05 10 1899-12-31 00:00:00.000 22000016000 И вот мы в конце А хотелось бы сразу получить ever_parim ever_lineno ever_ondate ever_detim ТРИМ.468369.003-01 10 1899-12-31 00:00:00.000 ТРИМ.301412.022-01 ТРИМ.301412.022-01 10 1899-12-31 00:00:00.000 ТРИМ.687281.210 ТРИМ.687281.210 20 1899-12-31 00:00:00.000 6Д8.128.041-05 6Д8.128.041-05 10 1899-12-31 00:00:00.000 22000016000 ТРИМ.468369.003-01 20 1899-12-31 00:00:00.000 ТРИМ.301412.023 - (это следующее изделие из первого запроса) и дальше разворачивать уже второе изделие, далее 3 и т.д. Потом мы добавим критерии отбора и это сократит выборку, но это если получится сделать такой запрос Дык, ты ж фсе сам написал. Осталось создать временную таблицу и цикл. ЗЫ. Ну еще рекурсивное СТЕ. Но временная таблица проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2018, 18:22 |
|
||
|
Дерево сборки
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2018, 18:34 |
|
||
|
Дерево сборки
|
|||
|---|---|---|---|
|
#18+
К сожалению, мои познания в SQL слишком незначительны и создание даже временной таблицы с циклом для меня проблема. Про рекурсивное СТЕ я вообще молчу. Всё что я находил по этой теме, для меня что китайские иероглифы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2018, 18:37 |
|
||
|
Дерево сборки
|
|||
|---|---|---|---|
|
#18+
aleks222, Заранее благодарю. Проверю завтра, как на работе окажусь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2018, 18:40 |
|
||
|
Дерево сборки
|
|||
|---|---|---|---|
|
#18+
Bob2012, А на рекурсии как то так Код: 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. pid и cid - это ваши parim|detim ord - lineno ну и решение имеет ряд ограничений: 1. уровень вложенности не более 100(решается через maxrecursion и при необходимости - замену varchcar(2000) на нечто большее) 2. не больше 9999 различных детей для одного родителя(тоже вопрос решаемый) 3. недопустимы циклические ссылки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2018, 18:46 |
|
||
|
Дерево сборки
|
|||
|---|---|---|---|
|
#18+
Посетитель, И Вам низкий поклон). Завтра всё обкатаю и отпишусь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2018, 18:50 |
|
||
|
Дерево сборки
|
|||
|---|---|---|---|
|
#18+
Bob2012, хммм, а вам что из предложенного нужно то?) я делал упор на сортировку с учетом поиска в глубину aleks222, похоже, решил что достаточно сортировки по поиску в ширину. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2018, 19:01 |
|
||
|
Дерево сборки
|
|||
|---|---|---|---|
|
#18+
Посетитель, Завтра узнаю, когда с коллегой возьмёмся за эксперименты и расскажу. Мои знания не позволяют на данный момент понять всю глубину Вашей помощи, ибо я глуп в SQL)). Если по факту, то у нас есть код который вытягивает товарный план, но с нашими пожеланиями. Количество позиций около 2к, но около 70% это просто детали и они нас не интересуют. Вот остальные являются сборочными единицами и нам необходимо будет раскрыть примерно 500 позиций, вплоть до деталей. Глубина вряд ли будет больше 10-15, а ширина возможно может достигать 100, но это приблизительные цифры. Нужно будет проверять. P.S. Если честно я пока даже не понимаю как применить Ваш цикл, а куда мне коды изделия добавлять)?. Надеюсь завтра разберёмся и всё получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2018, 19:23 |
|
||
|
Дерево сборки
|
|||
|---|---|---|---|
|
#18+
Bob2012 Глубина вряд ли будет больше 10-15, а ширина возможно может достигать 100, но это приблизительные цифры. Нужно будет проверять. Глубже и ширше!!! Ээээ... стисняюсь спросить: ширина чего? Код: 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. 39. 40. 41. 42. 43. 44. 45. 46. 47. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2018, 11:25 |
|
||
|
Дерево сборки
|
|||
|---|---|---|---|
|
#18+
aleks222ширина чего? графа же. только не того, который Лев Николаевич. а того, который должен получиться из данной номенклатуры изделий. меня все еще мучает вопрос, а какую задачу решаем :) судя по изначальному примеру - требуется таки именно пересортировать записи с учетом алгоритма поиска в глубину, ибо набор что есть/ что надо содержит абсолютно одинаковй набор данных, но в разном порядке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2018, 11:40 |
|
||
|
Дерево сборки
|
|||
|---|---|---|---|
|
#18+
Посетительaleks222ширина чего? графа же. только не того, который Лев Николаевич. а того, который должен получиться из данной номенклатуры изделий. меня все еще мучает вопрос, а какую задачу решаем :) судя по изначальному примеру - требуется таки именно пересортировать записи с учетом алгоритма поиска в глубину, ибо набор что есть/ что надо содержит абсолютно одинаковй набор данных, но в разном порядке. "1 млн" чего-то там в таблице и " Количество позиций около 2к" намекают на то, что выбираем таки не все. просто пример неудачен. Ну а сортировку... можно и сортировку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2018, 11:50 |
|
||
|
Дерево сборки
|
|||
|---|---|---|---|
|
#18+
aleks222, Операция вставки слишком дорогостоящая, чтобы делать ее по одной записи в цикле... Есть же CTE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2018, 14:22 |
|
||
|
Дерево сборки
|
|||
|---|---|---|---|
|
#18+
лоллaleks222, по одной записи в цикле... Есть же CTE Ты точно арифметику освоил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2018, 14:31 |
|
||
|
Дерево сборки
|
|||
|---|---|---|---|
|
#18+
aleks222, Леха, по одному уровню добавляешь.. CTE освоил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2018, 16:03 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=147&tid=1689597]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 384ms |

| 0 / 0 |
