|
|
|
Иерархия
|
|||
|---|---|---|---|
|
#18+
есть табличка, типа есть группы в них группы или товары (как файлы-папки): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Код: plaintext для товаров (не групп) верно: LEFTBOUND=RIGHTBOUND требуется написать запрос, упорядочивающий записи по иерархии, а среди записей одного уровня должны вначале идти группы, например: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. смог построить запрос по-иерархии, но не добился чтобы группы в одном уровне были сверху: Код: plaintext 1. 2. 3. 4. поле glevel отвечает за уровень вложенности записи С уважением, Naf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2009, 15:05 |
|
||
|
Иерархия
|
|||
|---|---|---|---|
|
#18+
> требуется написать запрос Исправьте структуру. Не читайте Celco, его примеры носят исключительно теоретический характер и на практике применяться не должны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2009, 15:15 |
|
||
|
Иерархия
|
|||
|---|---|---|---|
|
#18+
guest_20040621> требуется написать запрос Исправьте структуру. Не читайте Celco, его примеры носят исключительно теоретический характер и на практике применяться не должны. это эксперимет, при малом и неоперативном изменении данных удобно (структура в основном на чтение) выход видится один - при вставке новых групп анализировать и сдвигать LEVELBOUND вниз у элементов-не-групп ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2009, 15:21 |
|
||
|
Иерархия
|
|||
|---|---|---|---|
|
#18+
> это эксперимет Как получить иерархию наиболее извращенным способом? Вы понимаете, что невозможно придумать условия, которым такая реализация будет удовлетворять? > при малом и неоперативном изменении данных удобно (структура в основном на чтение) Удобно - это когда все иерархии в базе данных имеют общую каноническую модель и когда view получаются простыми и безгеморройными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2009, 15:30 |
|
||
|
Иерархия
|
|||
|---|---|---|---|
|
#18+
guest_20040621> это эксперимет Как получить иерархию наиболее извращенным способом? Вы понимаете, что невозможно придумать условия, которым такая реализация будет удовлетворять? > при малом и неоперативном изменении данных удобно (структура в основном на чтение) Удобно - это когда все иерархии в базе данных имеют общую каноническую модель и когда view получаются простыми и безгеморройными. Прошу Вас предложить свой вариант иерархии ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2009, 15:34 |
|
||
|
Иерархия
|
|||
|---|---|---|---|
|
#18+
guest_20040621Сформулируйте задачу. Есть справочник товаров, он должен быть иерархический. У одного элемента может быть только один владелец-группа. Вложенность не ограниченная. Необходимо простым способом (одним запросом желательно) выводить его в иерархическом виде (это текущий топик). Также соединять другие таблицы с ней, выводя данные по записям справочника и агрегирующие по группам. Например (упрощенно) есть также таблица Код: plaintext 1. 2. 3. 4. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2009, 15:47 |
|
||
|
Иерархия
|
|||
|---|---|---|---|
|
#18+
> Есть справочник товаров Характер справочника? Правила классификации? Предмет классификации? Область применения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2009, 15:53 |
|
||
|
Иерархия
|
|||
|---|---|---|---|
|
#18+
guest_20040621> Есть справочник товаров Характер справочника? Правила классификации? Предмет классификации? Область применения?Правила и остальное на усмотрение пользователей оставляются. Для примера, посмотрите 1С, вот аналог справочника Номенклатура там. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2009, 15:55 |
|
||
|
Иерархия
|
|||
|---|---|---|---|
|
#18+
н-да, не все так просто внутри одной группы нужно сортировать более хитро: сначала группы потом остальные записи, но и те и те по алфавиту С уважением, Naf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2009, 16:22 |
|
||
|
Иерархия
|
|||
|---|---|---|---|
|
#18+
> Правила и остальное на усмотрение пользователей Тогда задача не имеет простого решения. Невозможно классифицировать все, что угодно, каким угодно образом. А если не париться, то три подзадачи: собственно классификатор (включая зависимости и пр.), предмет классификации (в данном случае товары) и собственно связи между классификатором и предметами классификации. > посмотрите 1С Не напрягайте модератора. Одинце - то же самое, что и писанина Celco: для практического применения это непригодно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2009, 16:25 |
|
||
|
Иерархия
|
|||
|---|---|---|---|
|
#18+
guest_20040621> Правила и остальное на усмотрение пользователей Тогда задача не имеет простого решения. Невозможно классифицировать все, что угодно, каким угодно образом. А если не париться, то три подзадачи: собственно классификатор (включая зависимости и пр.), предмет классификации (в данном случае товары) и собственно связи между классификатором и предметами классификации. > посмотрите 1С Не напрягайте модератора. Одинце - то же самое, что и писанина Celco: для практического применения это непригодно. Не надо все, надо - товары. каким образом? ну допустим по номенклатурным группам, заданным на предприятие. Например: группа "Молочные продукты" включает в себя группы "Молоко", "Кефир"... Группа "Молоко" состоит из товаров "Молоко 3%", "Молоко 6%" ... Товары могут иметь произвольное число вложений. Например "Молоко 3%" - 3 уровня вложенности, а "Хлеб форомовой" - 2 уровня. А насчет непрактичности 1С, жизнь показывает обратное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2009, 16:32 |
|
||
|
Иерархия
|
|||
|---|---|---|---|
|
#18+
> группа "Молочные продукты" включает в себя группы "Молоко", "Кефир"... Так и делайте, какие проблемы? Классификатор - отдельно, товары - отдельно, связи - отдельно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2009, 16:43 |
|
||
|
Иерархия
|
|||
|---|---|---|---|
|
#18+
guest_20040621> группа "Молочные продукты" включает в себя группы "Молоко", "Кефир"... Так и делайте, какие проблемы? Классификатор - отдельно, товары - отдельно, связи - отдельно.Я думал над этим, чтоб группы вынести в отдельную таблицу, но что это дает, если число вложений групп заранее неизвестно? тоже самое, что они в общей таблице. В смысле та же проблема упорядочивания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2009, 16:53 |
|
||
|
Иерархия
|
|||
|---|---|---|---|
|
#18+
> что это дает Корректную модель. > число вложений групп заранее неизвестно И? Для каждого элемента классификатора храните уровень и глубину, если всегда нужно это знать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2009, 17:07 |
|
||
|
Иерархия
|
|||
|---|---|---|---|
|
#18+
guest_20040621> что это дает Корректную модель. > число вложений групп заранее неизвестно И? Для каждого элемента классификатора храните уровень и глубину, если всегда нужно это знать."уровень и глубину" а простите что есть глубина? уровень я определял количество вложений записи в другие. Эти данные я и так вытащить могу. Мне нужна упорядоченность: - по иерархии, внутри нее - по признаку группа или нет (сначала группы), среди них по алфавиту ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2009, 17:12 |
|
||
|
Иерархия
|
|||
|---|---|---|---|
|
#18+
в общем, вы можете конкретный (достаточно простой) пример привести желательно без рекурсивного вызова процедур С уважением, Naf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2009, 17:13 |
|
||
|
Иерархия
|
|||
|---|---|---|---|
|
#18+
В общем задача такая: какая наиболее оптимальная структура таблицы справочника, чтобы наиболее просто получать иерархический список (упорядоченность по иерархии и доп. полю, например наименованию или признаку группы + наименованию) Соответственно, достаточно просто получать агрегатные функции из других таблиц с учетом иерархии. Достаточно просто - это одним запросом и без рекурсии хранимых процедур. С уважением, Naf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2009, 17:32 |
|
||
|
Иерархия
|
|||
|---|---|---|---|
|
#18+
Когда в практике ты "ноль" можно по теоретизировать. Итак, пусть есть таблица представляющая собой некое множество записей, на котором хотим задать отношение полного порядка (а попросту, упорядочить каким-то способом). Обозначим A>>B если в нашем упорядочивании запись A идет раньше B. Введем функцию r(A,B) =1, если A>>B и =0 иначе. Очевидно, что r(A,A)=0; r(A,B)=1-r(B,A); если r(A,B)=r(B,C)=1 тогда r(A,С)=1. Тогда функция R(A)=Sum(r(A,B),B-пробегает все множество) принимает различные значения 0,1,...,Count(*)-1 и задает тот же порядок на целых числах. Переводя в SQL, получаем запрос "универсального" упорядочивания: Код: plaintext 1. 2. 3. 4. Код: plaintext 1. 2. 3. 4. Вернемся к текущей задаче. Необходимо упорядочить множество по-иерархии (обозначим >>) и внутри одной ветки иерархии по другому признаку, например паре IsGroup,Name (обозначим >). Итак, для каждой записи можно указать "родительскую", на которую ссылается Parent. Для каждой записи A можно записать родительский ряд: A=A0<<A1<<...<<An=NULL где Ai.Parent = A(i+1). Для пары (A,B) минимальным предком X назовем запись наибольшего уровня вложенности, одновременно встречающееся в родительских рядах A и B (возможно NULL). Если A и B не расположены в одном родительском ряду, то минимальные индивидуальные родители относительно A и B это элементы в родительских рядах An<<X и Bm<<X (предшествующие X непосредственно). Тогда введенная ранее функция r(A,B) равна 1 тогда и только тогда, когда: 1. B!=A и A лежит в родительском ряду B. либо 2. An>Bm (верно второе упорядочивание). Как видно из написанного нам понадобится использование LEFTBOUND и RIGHTBOUND, но придется использовать многократное соединение таблицы самой с собой. А именно: найти минимального предка, найти индивидуальных предков и сравнить их. Но, зачастую, практика это не теория, надеюсь на более простое решение задачи. С уважением, Naf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2009, 09:16 |
|
||
|
Иерархия
|
|||
|---|---|---|---|
|
#18+
Вы не имеете ни малейшего представления ни о классификации, ни о проектировании, ни о теории множеств. Я не могу тратить свое время на глупые измышления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2009, 11:08 |
|
||
|
Иерархия
|
|||
|---|---|---|---|
|
#18+
guest_20040621Вы не имеете ни малейшего представления ни о классификации, ни о проектировании, ни о теории множеств. Я не могу тратить свое время на глупые измышления.От Вас я тоже никакой конкретики не увидел. Можете не тратить свое время на меня, а я свое на Вас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2009, 11:12 |
|
||
|
Иерархия
|
|||
|---|---|---|---|
|
#18+
Вывод дерева с сортировкой внутри каждого уровня: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2009, 12:50 |
|
||
|
Иерархия
|
|||
|---|---|---|---|
|
#18+
н-да, без специфики серверов, то есть максимально переносимо между СУБД вышло вот так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2009, 14:13 |
|
||
|
Иерархия
|
|||
|---|---|---|---|
|
#18+
интересно насколько это хуже рекурсии? С уважением, Naf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2009, 14:14 |
|
||
|
Иерархия
|
|||
|---|---|---|---|
|
#18+
поправить упорядочивание на: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2009, 15:08 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=84&tid=1543092]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
64ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
73ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 430ms |

| 0 / 0 |
