zerocool151
دوشنبه 16 بهمن 1391, 13:52 عصر
بچه ها کمک میخوام فوری یک جدول با 3 فش فیلد
Id,Parent,Title
حالا میخوام با یک کوئری تمامی child های زیرین رو بیارم
مثلا فکر کنید : آلبوم موسیقی > پاپ > محسن یگانه > حباب
با زدن id آلبوم موسیقی فقط حبلب رو نمایش بده
ممنون میشم سریع راهنمایی کنید
محمد سلیم آبادی
دوشنبه 16 بهمن 1391, 14:59 عصر
اگر فرضا داده هایتان به این شکل باشد:
A
|
B
/ \
C D
|
E
با دادن مقدار B، چه گره هایی از این درخت باید انتخاب شوند؟ D و E یا فقط E ؟
آیا منظورتون گره های موجود در برگ درخت هست؟
zerocool151
دوشنبه 16 بهمن 1391, 15:19 عصر
D , E
البته برای جفتشو اگه میتوانیید بگید ممنون میشم
محمد سلیم آبادی
دوشنبه 16 بهمن 1391, 16:09 عصر
declare @t table
(id char(1) primary key,
parent char(1),
title varchar(10));
insert @t values ('A',null,'a'),
('B', 'A', 'b'), ('C', 'A', 'c'),
('D', 'B', 'd'), ('E', 'D', 'e'),('F','D','f')
/*
A
/ \
B C
|
D
| \
E F
*/
;with cte as
(
select id, title, rnk=0 from @t
where parent = 'A'
union all
select t.id, t.title, rnk+1
from cte join @t t
on cte.id = t.parent
)
select *
from
(
select *, dense_rank() over(order by rnk desc) rk
from cte
)t
where rk = 1
zerocool151
دوشنبه 16 بهمن 1391, 19:45 عصر
ممنون واقعا بار سنگینیو از رو دوشم ورداشتی
کارم راه افتاد ولی میشه یکم شفاف سازی کنی یکم بفهمم چی شد قضیه؟مثلا چجوری کار میکنه و rnk rk چی هست .
بازم ممنونم
محمد سلیم آبادی
دوشنبه 16 بهمن 1391, 21:13 عصر
توسط ستون rnk سطوح (level) گره را تعیین می کنیم. و در انتها، هر گره ی برگی که در آخرین سطح قرار گرفته انتخاب میشه (شرط rk = 1)
برای اینکه درست متوجه مکانیزم query بشین بایستی با روال کار recursive cte آشنا باشین...
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.