|
|
|
Графы. Обход в глубину и динамические масивы
|
|||
|---|---|---|---|
|
#18+
Имеется следующая задача: В таблице в одном поле хранится номер группы, а во втором номер родительской группы для данной(если конкретизовать, то это группы товара). Нужно сделать выборку номеров группы вместе с всеми ее подгруппами. Как это правильно сделать? Одним из вариантов решения вижу графы, обход в глубину. Но не совсем четко представляю как реализовать их с динамическими масивами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2006, 18:26 |
|
||
|
Графы. Обход в глубину и динамические масивы
|
|||
|---|---|---|---|
|
#18+
Мужик, эт тебе праграмму писать нада ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2006, 18:30 |
|
||
|
Графы. Обход в глубину и динамические масивы
|
|||
|---|---|---|---|
|
#18+
MasterZivМужик, эт тебе праграмму писать нада ... Это я прекрасно понимаю. Не совсем понимаю каким образом осуществить реализацию.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2006, 18:31 |
|
||
|
Графы. Обход в глубину и динамические масивы
|
|||
|---|---|---|---|
|
#18+
Предлагаю обойти дерево в глубину. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2006, 01:54 |
|
||
|
Графы. Обход в глубину и динамические масивы
|
|||
|---|---|---|---|
|
#18+
WWWovanИмеется следующая задача: В таблице в одном поле хранится номер группы, а во втором номер родительской группы для данной(если конкретизовать, то это группы товара). Нужно сделать выборку номеров группы вместе с всеми ее подгруппами. Как это правильно сделать? Одним из вариантов решения вижу графы, обход в глубину. Но не совсем четко представляю как реализовать их с динамическими масивами. Я делал похожую задачу: расшифровка рецептуры резиновых смесей для расчета необходимых материалов и полуфабрикатов. Правда делал это все средствами SQL в среде FoxPro... Алгоритм примерно следующий: 1. Создал временную таблицу-курсор, куда помещал результаты (create cursor...) 2. В другой курсор (курсор 2) поместил всех родителей. (Select...where <родитель>=NULL) 3. Скопировал данные из курсора2 в результирующий курсор. 4. В курсор2 поместил детей родителей, находящихся в настоящий момент в курсоре2 (select ... where <родитель>=cursor2.ID_product) 5. Пункты 3 и 4 повторял до тех пор, пока не получал пустой курсор курсор2 NOTE: ID самого первого родителя я "тянул" до конца, так как у разных родителей могли быть одинаковые "дети" (с одним номером ID). 6. Дальше делал выборку из результирующего курсора (для сортировки, группировки и т.д....) Получалась таблица примерно следующей структуры: ID_parent,ID_product,Name, .... 11111111,111111111,Колесо R-13,.... 11111111,111111112,Покрышка,.... 11111111,111111115,Камера,..... 11111111,111111120,"золотник",.... 11111111,111112001,колпачок,..... 22222222,222222222,Колесо R-17,.... 22222222,111111112,Покрышка,.... 22222222,111111115,Камера,.... и т.д........ Посмотри, может поможет чем... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2006, 07:26 |
|
||
|
Графы. Обход в глубину и динамические масивы
|
|||
|---|---|---|---|
|
#18+
Мужчины, вы чего ? Форумом ошиблись ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2006, 10:24 |
|
||
|
Графы. Обход в глубину и динамические масивы
|
|||
|---|---|---|---|
|
#18+
Станислав C. WWWovanИмеется следующая задача: В таблице в одном поле хранится номер группы, а во втором номер родительской группы для данной(если конкретизовать, то это группы товара). Нужно сделать выборку номеров группы вместе с всеми ее подгруппами. Как это правильно сделать? Одним из вариантов решения вижу графы, обход в глубину. Но не совсем четко представляю как реализовать их с динамическими масивами. Я делал похожую задачу: расшифровка рецептуры резиновых смесей для расчета необходимых материалов и полуфабрикатов. Правда делал это все средствами SQL в среде FoxPro... Алгоритм примерно следующий: 1. Создал временную таблицу-курсор, куда помещал результаты (create cursor...) 2. В другой курсор (курсор 2) поместил всех родителей. (Select...where <родитель>=NULL) 3. Скопировал данные из курсора2 в результирующий курсор. 4. В курсор2 поместил детей родителей, находящихся в настоящий момент в курсоре2 (select ... where <родитель>=cursor2.ID_product) 5. Пункты 3 и 4 повторял до тех пор, пока не получал пустой курсор курсор2 NOTE: ID самого первого родителя я "тянул" до конца, так как у разных родителей могли быть одинаковые "дети" (с одним номером ID). 6. Дальше делал выборку из результирующего курсора (для сортировки, группировки и т.д....) Получалась таблица примерно следующей структуры: ID_parent,ID_product,Name, .... 11111111,111111111,Колесо R-13,.... 11111111,111111112,Покрышка,.... 11111111,111111115,Камера,..... 11111111,111111120,"золотник",.... 11111111,111112001,колпачок,..... 22222222,222222222,Колесо R-17,.... 22222222,111111112,Покрышка,.... 22222222,111111115,Камера,.... и т.д........ Посмотри, может поможет чем... Спасибо за совет. Если не получится сделать средствами программы буду делать так... Но хотелось бы не загружать сервер базы такими манипуляциями, а сделать выборку родителей и потомков и уже нужные нацти средствами программы, которая на C++... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2006, 10:25 |
|
||
|
Графы. Обход в глубину и динамические масивы
|
|||
|---|---|---|---|
|
#18+
MasterZivМужчины, вы чего ? Форумом ошиблись ? Почему ошиблись? Форум по sql, а база у меня на Yaffil висит... Ветка по С++, прога у меня на Builder C++ 6.0 пишеться... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2006, 10:28 |
|
||
|
Графы. Обход в глубину и динамические масивы
|
|||
|---|---|---|---|
|
#18+
WWWovan MasterZivМужчины, вы чего ? Форумом ошиблись ? Почему ошиблись? Форум по sql, а база у меня на Yaffil висит... Ветка по С++, прога у меня на Builder C++ 6.0 пишеться... Посмотрите в документацию, поддерживает ли ваша база join. select p.parent_id , c.product_id , p.name, c.name from table1 p inner join table1 c on p.parent_id=c.parent_id where parent_id=blablabla выдаст необходимый вам результат. Если поле parent проиндексировано база справится с этим быстрее чем проход по дереву. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2006, 12:42 |
|
||
|
Графы. Обход в глубину и динамические масивы
|
|||
|---|---|---|---|
|
#18+
onstat- WWWovan MasterZivМужчины, вы чего ? Форумом ошиблись ? Почему ошиблись? Форум по sql, а база у меня на Yaffil висит... Ветка по С++, прога у меня на Builder C++ 6.0 пишеться... Посмотрите в документацию, поддерживает ли ваша база join. select p.parent_id , c.product_id , p.name, c.name from table1 p inner join table1 c on p.parent_id=c.parent_id where parent_id=blablabla выдаст необходимый вам результат. Если поле parent проиндексировано база справится с этим быстрее чем проход по дереву. Но это не совсем то. При таком запросе(если на место blablabla поставить нужный parent_id) оно выдает только подгруппы первого уровня(да и то с повторениями), а глубже не заходит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2006, 13:58 |
|
||
|
Графы. Обход в глубину и динамические масивы
|
|||
|---|---|---|---|
|
#18+
WWWovan onstat- WWWovan MasterZivМужчины, вы чего ? Форумом ошиблись ? Почему ошиблись? Форум по sql, а база у меня на Yaffil висит... Ветка по С++, прога у меня на Builder C++ 6.0 пишеться... Посмотрите в документацию, поддерживает ли ваша база join. select p.parent_id , c.product_id , p.name, c.name from table1 p inner join table1 c on p.parent_id=c.parent_id where parent_id=blablabla выдаст необходимый вам результат. Если поле parent проиндексировано база справится с этим быстрее чем проход по дереву. Но это не совсем то. При таком запросе(если на место blablabla поставить нужный parent_id) оно выдает только подгруппы первого уровня(да и то с повторениями), а глубже не заходит... Повторения убираются с помощью distinct а where выглядит приблизительно так: с.parent_id in ( select t.product_id from table1 t where t.parent_id=c.product_id ) or p.parent_id=blablabla Не буду отрицать, серверу будет тяжело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2006, 14:55 |
|
||
|
Графы. Обход в глубину и динамические масивы
|
|||
|---|---|---|---|
|
#18+
onstat-... а where выглядит приблизительно так: с.parent_id in ( select t.product_id from table1 t where t.parent_id=c.product_id ) or p.parent_id=blablabla Не буду отрицать, серверу будет тяжело. В том-то и дело, что за один селект такого (выбрать сразу все уровни вложения "детей" при условии, что число уровней вложения заранее неизвестно) сделать нельзя! Только через процедуру (Возможно - хранимую процедуру). Я на подобную задачу (см.выше) не один день убил пока все понял и сделал правильно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2006, 15:05 |
|
||
|
Графы. Обход в глубину и динамические масивы
|
|||
|---|---|---|---|
|
#18+
Поэтому я и хочу выбрать сначала слектом с таблицы селектом все ID и PARENTID, а потом зная ID вершины родителя програмно определить всех его потомков и подпотомков. Програмно в первую очередь из-за того, что с базой будет работать не один человек(примерно 20)... а такие запросы они точно посувствуют... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2006, 15:20 |
|
||
|
Графы. Обход в глубину и динамические масивы
|
|||
|---|---|---|---|
|
#18+
Станислав C. В том-то и дело, что за один селект такого (выбрать сразу все уровни вложения "детей" при условии, что число уровней вложения заранее неизвестно) сделать нельзя! Только через процедуру (Возможно - хранимую процедуру). Я на подобную задачу (см.выше) не один день убил пока все понял и сделал правильно... Меня настораживает ваша категоричность. Почему нельзя зделать? В чем ограничения? На sql можно реализовать ветвленную рекурсию значит можно реализовать обход графа. Пример рекурсии я привел выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2006, 15:41 |
|
||
|
Графы. Обход в глубину и динамические масивы
|
|||
|---|---|---|---|
|
#18+
В таком варианте(уже адаптировано к моим условиям) Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2006, 16:11 |
|
||
|
Графы. Обход в глубину и динамические масивы
|
|||
|---|---|---|---|
|
#18+
WWWovan MasterZivМужчины, вы чего ? Форумом ошиблись ? Почему ошиблись? Форум по sql, а база у меня на Yaffil висит... Ветка по С++, прога у меня на Builder C++ 6.0 пишеться... Железная логика !! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2006, 17:31 |
|
||
|
Графы. Обход в глубину и динамические масивы
|
|||
|---|---|---|---|
|
#18+
Когда с запросом натрахаетесь, сходите хотябы в http://www.sql.ru/forum/actualtopics.aspx?bid=2, там вам быстро объяснят, почему нельзя, где нельзя и вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2006, 17:35 |
|
||
|
Графы. Обход в глубину и динамические масивы
|
|||
|---|---|---|---|
|
#18+
WWWovanВ таком варианте(уже адаптировано к моим условиям) Код: plaintext 1. 2. похоже что выделенное дожно быть t.id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2006, 18:52 |
|
||
|
Графы. Обход в глубину и динамические масивы
|
|||
|---|---|---|---|
|
#18+
Результат другой, но все-равно не то что нужно...(результотов намного больше чем должно быть...в том числе и тех, которые не должны попадать...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2006, 19:11 |
|
||
|
Графы. Обход в глубину и динамические масивы
|
|||
|---|---|---|---|
|
#18+
вообщем у мну есть документация по графам...вообще.. могу скинуть.. Ziv ну и нафик так категорично настаивать... х) этж не ты мучаешся %) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2006, 13:04 |
|
||
|
Графы. Обход в глубину и динамические масивы
|
|||
|---|---|---|---|
|
#18+
Гадёнышвообщем у мну есть документация по графам...вообще.. могу скинуть.. Ziv ну и нафик так категорично настаивать... х) этж не ты мучаешся %) Можно. Но это уже для общего развития. Решение я уже нашел. Мыло: gwf[собака]yandex.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 19:42 |
|
||
|
Графы. Обход в глубину и динамические масивы
|
|||
|---|---|---|---|
|
#18+
Усё смотри мыло ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2006, 01:45 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33553395&tid=2031903]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
151ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
76ms |
get tp. blocked users: |
1ms |
| others: | 251ms |
| total: | 522ms |

| 0 / 0 |
