|
|
|
древовидные структуры
|
|||
|---|---|---|---|
|
#18+
Всем привет! Пусть имеется таблица elements { elementID, - идентификатор элемента parentID - идентификатор родительского элемента } Нужно преобразовать эту таблицу в XML-дерево. Естественно, рекуррентной вложенности в таблице никакой нет, корневые элементы имеют parentID = NULL; Мне ничего не приходит в голову кроме тучи последовательных запросов: сначала получаем корневые элементы, потом для них, соответственно, потомков, потом потомков для потомков и т.д. Может кто-нибудть предложит идею? Возможно видоизменение таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2005, 12:29:52 |
|
||
|
древовидные структуры
|
|||
|---|---|---|---|
|
#18+
Степень вложенности логически не ограничена? Скажем, категория, подкатегория и элемент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2005, 12:31:14 |
|
||
|
древовидные структуры
|
|||
|---|---|---|---|
|
#18+
о степени вложенности ничего не известно, скорее всего до глубины примерно в 10 элементов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2005, 12:36:11 |
|
||
|
древовидные структуры
|
|||
|---|---|---|---|
|
#18+
Не вижу проблемы в перегон таблицы древовидной в XML, в XML поддерживаются нормально вложенности элементов, главное, чтобы сначала шли родительские, а потом чилдовые. Каких-то утилит не видел для такого, но написать в любой среде программной подобный алгорит не составляет особого труда. Чилды имеют ключи большие чем у родителей в этой реальной таблице? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2005, 13:19:00 |
|
||
|
древовидные структуры
|
|||
|---|---|---|---|
|
#18+
Если используешь MySQL 5.0 решением может быть написание рекурсивной хранимой процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2005, 13:35:18 |
|
||
|
древовидные структуры
|
|||
|---|---|---|---|
|
#18+
Валентин КНе вижу проблемы в перегон таблицы древовидной в XML, в XML поддерживаются нормально вложенности элементов, главное, чтобы сначала шли родительские, а потом чилдовые. Каких-то утилит не видел для такого, но написать в любой среде программной подобный алгорит не составляет особого труда. Чилды имеют ключи большие чем у родителей в этой реальной таблице? Не о труде речь :) Первое, что приходит в голову работает исправно, но медленно и неэффективно по использованию оперативы. О ключах - всё так и есть, они автоматические. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2005, 13:37:21 |
|
||
|
древовидные структуры
|
|||
|---|---|---|---|
|
#18+
авторЕсли используешь MySQL 5.0 решением может быть написание рекурсивной хранимой процедуры. Мысль интересная! Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2005, 13:39:50 |
|
||
|
древовидные структуры
|
|||
|---|---|---|---|
|
#18+
selinoth авторЕсли используешь MySQL 5.0 решением может быть написание рекурсивной хранимой процедуры. Мысль интересная! Спасибо. Рекурсивность отключена в процедурах версии с 5.0.8, если не ошибаюсь, но отключена 100% ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2005, 13:52:35 |
|
||
|
древовидные структуры
|
|||
|---|---|---|---|
|
#18+
Валентин К Рекурсивность отключена в процедурах версии с 5.0.8, если не ошибаюсь, но отключена 100% ... а поначалу в ф-ях не поддерживался SELECT. Итого найти неглючную версию с поддержкой рекурсий и DML в функциях - проблема. Вопрос обсуждался неделю назад, все красиво если задать уровень вложенности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2005, 16:05:17 |
|
||
|
древовидные структуры
|
|||
|---|---|---|---|
|
#18+
Astron... а поначалу в ф-ях не поддерживался SELECT. Итого найти неглючную версию с поддержкой рекурсий и DML в функциях - проблема. Вопрос обсуждался неделю назад, все красиво если задать уровень вложенности. Подскажите, плиз, где конкретно - как тема называлась? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2005, 02:07:04 |
|
||
|
древовидные структуры
|
|||
|---|---|---|---|
|
#18+
Нашел удовлетворительное решение с помощью XSLT-преобразователя. Код на PHP получился просто малюсенький, но по таймингу работает почти в 10 раз быстрее, каскад обращений к mySQL-серверу. Очень рекомендую такой подход. Если кому интересно - могу поделиться примером. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2005, 19:22:09 |
|
||
|
древовидные структуры
|
|||
|---|---|---|---|
|
#18+
Если код действительно небольшой -- мб, стоит разместить его прямо тут? Код на PHP, конечно, имеет только косвенное отношение к MySQL, но как иллюстрация алгоритма... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2005, 19:58:12 |
|
||
|
древовидные структуры
|
|||
|---|---|---|---|
|
#18+
шаг 1: делаем выборку всех элементов таблицы вообще. шаг 2: строим следующее XML-дерево: Код: plaintext 1. 2. 3. 4. 5. 6. 7. шаг 3: пишем XSLT-преобразование: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. шаг 4: пишем PHP код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. работает шоколадно, микросекудны для весьма внушительных таблиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2005, 20:19:27 |
|
||
|
древовидные структуры
|
|||
|---|---|---|---|
|
#18+
Опечатка: selinothНашел удовлетворительное решение с помощью XSLT-преобразователя. Код на PHP получился просто малюсенький, но по таймингу работает почти в 10 раз быстрее, чем каскад обращений к mySQL-серверу. Очень рекомендую такой подход. Если кому интересно - могу поделиться примером. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 00:01:40 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=33245914&tid=1853706]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 365ms |

| 0 / 0 |
