|
|
|
Дерево из таблицы по id/pid
|
|||
|---|---|---|---|
|
#18+
Есть таблица: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. id - счётчик, pid - указание на материнский id, name - название. Задача: Создать ListBox, где строки былы бы в виде: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Условие: количество разделов/подразделов неограничено. Может у кого есть готовый алгоритм вывода такого дерева. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2003, 15:04 |
|
||
|
Дерево из таблицы по id/pid
|
|||
|---|---|---|---|
|
#18+
Вот пример (спасибо SergSuper) на T-SQL Цитата из ранних топиков: set nocount on declare @idParent int set @idParent=0 declare @t table(id int, parent int null, name varchar(10)) insert @t select 0, NULL, 0 insert @t select 1, 0, 1 insert @t select 2, 0, 2 insert @t select 3, 0, 3 insert @t select 4, 0, 4 insert @t select 5, 0, 5 insert @t select 6, 1, 6 insert @t select 7, 1, 7 insert @t select 8, 7, 8 insert @t select 9, 7, 9 declare @r table( id int,parent int null, level int, ord int null) declare @level int set @level=0 insert @r select @idParent, null, @level, 0 while exists(select * from @t t, @r r where level=@level and t.id=r.id) begin insert @r select t.id, t.parent, @level+1, null from @t t, @r r where level=@level and t.parent=r.id set @level=@level+1 update r set ord=ord+(select count(*) from @r r1, @r r2 -- здесь была ошибка where r2.ord is null and r2.parent = r1.id and r1.ord<r.ord) from @r r update r1 set ord= r2.ord+(select count(*) from @r r3 where r3.parent=r1.parent and r3.id<=r1.id) from @r r1, @r r2 where r1.ord is null and r1.parent=r2.id end select * from @r select space(level * 2)+name from @r r , @t t where r.id=t.id order by ord Если Вы хотите спросить по какому принципу будет отсортированы ветви одного уровня - то это задаётся в предпоследнем update: update r1 set ord= r2.ord+(select count(*) from @r r3 where r3.parent=r1.parent and r3.id<=r1.id) если Вы будете сравнивать здесь имена - будет отсортировано по именам(но надо только что бы они были все разные) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2003, 15:44 |
|
||
|
Дерево из таблицы по id/pid
|
|||
|---|---|---|---|
|
#18+
если дерево не надо очень часто обновлять то идеально следующее: http://sdm.viptop.ru/articles/sqltrees.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2003, 12:17 |
|
||
|
|

start [/forum/topic.php?fid=45&tid=1681733]: |
0ms |
get settings: |
6ms |
get forum list: |
16ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
16ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 279ms |

| 0 / 0 |
