Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Привет всем !!! Есть задачка таблица из двух полей ParentID, ChildID 44, 43 44, 42 42, 32 42, 41 43, 20 43, 21 43, 22 Хотелосьбы на выходе получить 44, 32 44, 41 44, 20 44, 21 44, 22 42, 32 42, 41 43, 20 43, 21 43, 22 т.е. есть какбы последовательности 44,42,32 или 44,42,41 хотелось бы получить концы ParentID, LastChildID Вообщем задача решена, но хотелось бы найти другие методы решения Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2001, 10:31 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
если я правильно понял условие, то: select ParentID=44, ChildID from TBL where ParentID<>44 union all select ParentID, ChildID from TBL where ParentID<>44 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2001, 14:21 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
А можно так: select t2.ParentID,t1.ChildId from t t1 inner join t t2 on t1.ParentId=t2.ChildId union all select t2.ParentId,t2.ChildId from t t1 right outer join t t2 on t1.ParentId=t2.ChildId where t1.ParentID is null ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2001, 14:58 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Спасибо Но я не упомянул одно условие, уровней может быть не ограниченно И если внести 45, 44, то все перестает работать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2001, 15:14 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
можно чуть подробней, еще раз, о каких уровнях мы говорим? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2001, 15:30 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Уровни наследования ( можно и так назвать ) т.е. при внесении 45, 44 должно получиться 45, 32 45, 41 45, 20 45, 21 45, 22 44, 32 44, 41 44, 20 44, 21 44, 22 42, 32 42, 41 43, 20 43, 21 43, 22 т.е. полследовательность наследования, если ее разложить в строку получится след. например 45,44,42,32 Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2001, 15:41 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Одним запросом, при такой структуре, по-моему не обойтись. Я бы сначала выбрал бездетных детей, потом их родителей, бабушек, прадедушек и так по всему дереву : create table #tmp (ParentId int,ChildId int) --выбираем бездетных с родителями Insert #tmp (ParentId,ChildId ) select distinct t1.ParentId,t1.ChildId from T as t1 where t1.ChildId not in (select t2.ParentId from T as t2) --выбираем всех остальных WHILE 1=1 BEGIN Insert #tmp(ParentId,ChildId ) select distinct t1.ParentId,t2.ChildId from T t1 inner join #tmp t2 on (t1.ChildId=t2.ParentId) where not Exists(select * from #tmp t3 where t3.ParentId=t1.ParentId and t3.ChildId=t2.ChildId) IF @@ROWCOUNT=0 BREAK END select * from #tmp drop table #tmp C уважением, Курков Михаил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2001, 16:34 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Спасибо Да, идея с циклами мне понравилась. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2001, 09:30 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Я, конечно понимаю, что классика требует для работы с деревьями использование рекурсий, но если задача заключается найти все листья для конкретного узла, то можно так по простенькому @declare uselID int set @uselID=45 create table #tab(chID int,isLeaf int) -- elLeaf будет содержать : 0-не лист, 1-лист insert into #tab (chID,isLeaf) select ChildID,0 from TreeTbl where ParentID=@uselID declare cur cursor for select chID,isLeaf from #tab open cur declare @chID int,@isLeaf int while 1=1 begin fetch next from cur into @chID,@isLeaf if @@FETCH_STATUS=-1 break if exists(select * from TreeTbl where ParentID=@chID) insert into #tab (chID,isLeaf) select ChildID,0 from TreeTbl where ParentID=@chID else update #tab set isLeaf=1 where currient of cur end close cur deallocate cur select chID from #tab where isLeaf=1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2001, 09:53 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32007066&tid=1826553]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 322ms |

| 0 / 0 |
