![]() |
|
Модераторы: Akina |
![]()
|
|
| Sawell |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 19.12.2009 Репутация: нет Всего: нет |
Есть таблица с полями Name, id, ParentID. Для постарения дерева через TreeView. Встал вопрос как можно просмотреть всех детей от выбранного родителя. При щелчке на нод в дереве получаю id данного нода. Проблема вся в том что групп и подгрупп может быть множество.
К примеру. A _|_ B C _|_ D E и т. Д. Name ID ParentID A 1 0 B 2 1 C 3 1 D 4 3 E 5 3 Так вот при получении id Группы А нужно получить id всех входящих в нее подгрупп т.е. B C D E. Причем эти данные нужны в запросе, для сортировки по ним товаров. Буду рад любому совету. Это сообщение отредактировал(а) Sawell - 4.1.2010, 16:50 |
|||
|
||||
| bopoha |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1283 Регистрация: 10.5.2006 Где: Беларусь, Минск Репутация: 21 Всего: 21 |
Такие id-и одним запросом не достанешь, т.к. нет рекусрсии. Только ручками сформировать - либо во временную таблиц, либо в масив, либо сгенерить множество запросов и объединить их в union.
|
|||
|
||||
| Sawell |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 19.12.2009 Репутация: нет Всего: нет |
bopoha, Дык я понимаю что одним запросом не обойдешся. Через запросы получилось провалиться максимум до 3го уровня. Бли запарился я совсем на этом месте. А если делать функцию, то там цикл нужен( если не ошибаюсь) а вот хотелось бы без него.
|
|||
|
||||
| bopoha |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1283 Регистрация: 10.5.2006 Где: Беларусь, Минск Репутация: 21 Всего: 21 |
Ох, и чем плох цикл?
Не хотите цикл - убирайте древовидную иерархию. За дерево нужно платить не только циклом но N-ым количеством запросов, где N "глубина" дерева. Это сообщение отредактировал(а) bopoha - 4.1.2010, 18:42 |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Существует достаточно много разных схем хранения и получения деревьев. Каждый оптимизирован для своей ситуации.
Для выбора подходящей схемы хранения нужно гораздо больше данных. Я в принципе не понял вот этого:
Оно тебе, я извиняюсь, нахрена? запихай данные в TreeView, и пусть он этими проблемами занимается. Поверь, у него получится лучше, чем у тебя. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Sawell |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 19.12.2009 Репутация: нет Всего: нет |
bopoha, делать N запросов не вариант! Я же не могу пердугадать сколько подгрупп сделает оператор.
Добавлено через 4 минуты и 44 секунды Akina, Вот ситуация у меня есть группа (глобальная) ну к примеру "Транспорт" в ней есть подгруппа "легковой", "грузовой" и т.д. а в подгруппе "грузавой" есть еще подгруппа "Тяжелый" а в этой подруппе еще..... Так вот к примеру при выборе в дереве группы "транспорт" в форме отображались данные входяшие во все ниже лежашие группы. |
|||
|
||||
| bopoha |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1283 Регистрация: 10.5.2006 Где: Беларусь, Минск Репутация: 21 Всего: 21 |
Динамически можно посчитать! Добавлено через 1 минуту и 36 секунд Помойму проблема надумана. Это простая задача. Берется и делается. Не устраивает производительность - оптимизируется алгоритм и/или способ хранения данных. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Повторяю ещё раз. Для ещё не отошедших от празднования. Загрузи данные в TreeView в соответствии с иерархией. Всё. Дальше это его забота - развернуть по клику выбранную группу и показать её подгруппы/элементы. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Sawell |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 19.12.2009 Репутация: нет Всего: нет |
Akina, данные в подчиненной форме. Т.е. В группе содержатся наименования. Дерево уже есть и работает! в дереве отобр. группы по которым я и хожу. но вот если я выбераю основную группу (в которой еще есть n-ое кол-во подгруп) то в результате в подчин. форме должны отоб. данные из всех групп входяших в основную! Короче просматривать всех детей и закидывать их во врем. табл. это получилось, (код потом) но временные табл. это не есть хорошо. Хотелось бы сразу в запрос...
|
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Ага... у тебя там ещё и подчинённая форма, оказывается... знаешь что, рассказывай-ка ты сразу всё, а не по кусочкам. А то телепаты, как обычно, в отпуске.
Добавлено через 55 секунд А ещё лучше - почитай вот это. И поступай соответственно. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| bopoha |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1283 Регистрация: 10.5.2006 Где: Беларусь, Минск Репутация: 21 Всего: 21 |
Глупости. Кто тебе сказал? Что бы не "засирать" основную бд стоит временные таблицы хранить в отдельном файле и пересоздавать ее при запуске. У меня такая система отлично работает. |
|||
|
||||
| Sawell |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 19.12.2009 Репутация: нет Всего: нет |
Ну в общем нашел такие пути. В первом случае созд-ю запрос где делаю отборку групп и уже его связываю с запросом, который делает отбор товара. Во втором принцип получения списка тот же только здесь я получаю данные в поле в форме в виде id Or id Or id Or id …..(11 Or 12 Or 13 Or 14….) НО со вторым вариантом проблема запрос на выборку не хочет принимать это поле (слишком сложное или неправильное выражение). Оно и понятно я ведь в SQL виде получаю что-то в виде WHERE [id]= Forms![NameForms]![idForm]. Этот вариант работает если в конструкторе в условие отбора прям вставить 11 Or 12 Or 13 Or 14… тогда он понимает что я хочу WHERE [id]=11 Or [id]=12 … Второй вариант был бы конечно лучше так как его можно испл. не только для формирования отчетов но и для отобр-я данных в подчиненной форме задавая этим полем условие отбора.
-----------------------------------------------Вар 2 -----------------------------------------------
Это сообщение отредактировал(а) Akina - 15.1.2010, 11:37 |
||||||
|
|||||||
| FINANSIST |
|
|||
|
Статус: Жив ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 11.4.2008 Где: Москва Репутация: 1 Всего: 23 |
А что, Nested Sets нынче не в моде? Это сообщение отредактировал(а) FINANSIST - 15.1.2010, 10:56 -------------------- “...Брали корову рыжую одну, отдавать будем корову рыжую одну, чтобы не нарушать отчетности” Эдуард Успенский, “Каникулы в Простоквашино” |
|||
|
||||
| Sawell |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 19.12.2009 Репутация: нет Всего: нет |
FINANSIST, Мммм. А с чем это едят??? |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
![]()
|
| Правила форума "MS Access" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MS Access | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |