PDA

View Full Version : استخراج زیر مجموعه های یک گزینه



raika17metal
شنبه 06 اسفند 1390, 00:08 صبح
با سلام. من یه جدول طراحی کردم به شکل زیر :
83268

حالا میخوام گزینه هایی رو انتخاب کنم که MenuID ی ParentID شون برابر 1 باشد.
برای مثال گزینه ASP.NET دارای ParentID = 4 می باشد (یعنی طراحی سایت) که خود طراحی سایت زیر مجموعه مقالات می باشند.
در اصل من قصد دارم گزینه هایی رو استخراج کنم که ParentID شون زیر مجموعه مقالات هستش

nedata
شنبه 06 اسفند 1390, 01:00 صبح
SELECT t2.menuname
FROM TableName t1 join TableName t2 on
t1.menuid=t2.parentid
join TableName t3 on
t3.menuid=t1.parentid
where t3.menuname='مقالات'

baktash.n81@gmail.com
شنبه 06 اسفند 1390, 09:04 صبح
سلام

با روشی که دوستمون گفت در صورتی که تعداد سطح ها اضافه بشه ... شما باید Join ها رو اضافه کنی ... و کلا روش مناسبس برای حالاتی که ممکنه تعداد سطح ها داینامیک باشه نیست ... روش استاندارد استفاده از توابع بازگشتی هست به این کدی که نوشتم یه نگاهی بنداز .... که چه جوری این جدول رو با خودش join می کنه ... به جای پارامتر منوی id منوی اصلی رو قرار بده


WITH MenuChart(ParentID, MenuID, MenuName, MenuLevel) AS
(
SELECT ParentID, MenuID, MenuName, 0 AS MenuLevel
FROM dbo.Menus
WHERE ParentID = @ParentID
UNION ALL
SELECT e.ParentID, e.MenuID, e.MenuName, MenuLevel + 1
FROM dbo.Menus AS e
INNER JOIN MenuChart AS d
ON e.ParentID = d.MenuID
)
SELECT *
FROM MenuChart
ORDER BY ParentID;


یه پیشنهاد به جای Null برای سرشاخه ها از -1 استفاده کن ...

raika17metal
شنبه 06 اسفند 1390, 19:27 عصر
سپاسگزارم از راهنماییتون

tiphooo
یک شنبه 07 اسفند 1390, 02:55 صبح
یه پیشنهاد به جای Null برای سرشاخه ها از -1 استفاده کن ...

دوست عزیز مزیت این کار در چی هست؟

baktash.n81@gmail.com
یک شنبه 07 اسفند 1390, 07:44 صبح
یکی از مزیت هاش این هست که چک کردن شرط مساوی -1 از Is null سریعتره ... خواناتره ... تو خیلی از الگوریتم ها استاندارد از -1 استفاده شده ... تو لایه app هم راحتتر می شه باهاش کار کرد ... و از همه مهمتر اینکه من باهاش راحتترم ... :))))))))))))