|
И снова непотопляемые иерархические каталоги
|
|||
---|---|---|---|
#18+
День добрый, форумчане! Исходная таблица - это отсортированные значения глубины вложенности, где 0 - это родительский каталог, 1-подкаталог и т.д. depth_id001233201233 Подскажите пожалста, как составить такую последовательность индексов? depth_idcat_index010212.122.1.132.1.1.132.1.1.222.1.20313.123.1.133.1.1.133.1.1.2 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2021, 21:44 |
|
И снова непотопляемые иерархические каталоги
|
|||
---|---|---|---|
#18+
tsutselola, Никак. У тебя в исходной таблице нету индексов, а значит и ссылаться не на что. А вот если бы были, то можно было бы сделать что-то в духе: Код: sql 1.
Повторять для каждой depth_id. А вообще, подобные задачи намного проще делать без SQL. Просто выбираешь всю таблицу а потом, уже имея у себя потоковый порядок и делать всяческую нумерацию. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2021, 00:10 |
|
И снова непотопляемые иерархические каталоги
|
|||
---|---|---|---|
#18+
tsutselola, показанная последовательность индексов является материализованным путём - materialized path. Возможно, есть смысл ознакомиться с разными способами хранения иерархий в БД. Иерархические структуры и деревья в SQL Способы хранения деревьев в реляционных базах данных Там описаны достоинства и недостатки разные способов. Возможно, есть смысл сразу материализованный путь использовать. Кроме того, в некоторых СУБД есть встроенная поддержка иерархий. Например, модуль ltree в Postgresql, тип HierarchyId в Sql Server. Возможно и в Sqlite что-то есть. Кроме того, не используется ли какая-нибудь ORM? В некоторых есть встроенная поддержка работы с иерархиями. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2021, 08:10 |
|
И снова непотопляемые иерархические каталоги
|
|||
---|---|---|---|
#18+
Спасибо, за пояснения. Статья как-то мне попадалась уже. Там описано как таким деревом пользоваться, но не как создавать. На стороне клиента я сделал генерацию такого списка, вот думаю, раз есть CTE, может и запросом можно. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2021, 08:29 |
|
И снова непотопляемые иерархические каталоги
|
|||
---|---|---|---|
#18+
tsutselola, Можно. Но для этого запрос должен возвращать ОТСОРТИРОВАННЫЕ данные. А у Вас нет никакого PK и нет никакого поля для сортировки. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2021, 10:34 |
|
И снова непотопляемые иерархические каталоги
|
|||
---|---|---|---|
#18+
p.s. таблица отсортированная сама по себе, на мой взгляд дурной тон. В SQLite еще можно считать, что есть скрытый PK в виде системного id и что под Вашеми словами "отсортированные значения" подразумевается именно он, но т.к. телепатические возможности у всех развиты в разной степени и все пользуются разными сортами кофе (а результат гадания по кофейной гуще явно зависит от сорта кофе и помола) - то лучше бы такие вещи указывать явно. Что и как "отсортировано". ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2021, 10:37 |
|
И снова непотопляемые иерархические каталоги
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Я выше написал что исходный столбец уже отсортирован по глубине вложения каталогов. Тут вопрос такой - можно ли по одному столбцу вложенности понять что за чем следует. Вообще целиком все выглядит так: Таблица Код: sql 1. 2. 3. 4. 5. 6.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Вот запрос на возвращение списка. Колонка ID с отступами, а хотелось бы конечно сгенерить дерево с индексами как в колонке Result и отступами как в колонке ID. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Результат выглядит так. IDResult11...21.1......31.1.1......61.1.2.........81.1.2.1...51.2......71.2.142 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2021, 21:04 |
|
И снова непотопляемые иерархические каталоги
|
|||
---|---|---|---|
#18+
Получилось добавить нумерацию корней в колонке Result2, но как от них собрать дальше материализованный путь - не могу сообразить. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
IDResult2Result111...2Null1.1......3Null1.1.1......6Null1.1.2.........8Null1.1.2.1...5Null1.2......7Null1.2.1422 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2021, 23:02 |
|
|
start [/forum/topic.php?fid=54&msg=40100562&tid=2008323]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
414ms |
get topic data: |
12ms |
get forum data: |
4ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 237ms |
total: | 751ms |
0 / 0 |