PDA

View Full Version : select ‌نمايش درختي پدر و فرزندي



S_O_S1982
یک شنبه 14 آذر 1389, 18:13 عصر
با سلام خدمت دوستان گرامي

اگه سوالم تكراري هست از شما دوستان گرامي عذر خواهي مي كنم


من يك جدول دارم به صورت زير id



id name parentid


يعني جدولي با سه فيلد كه در فيلد parent id ، همان مقادير id قرار مي گيرد و به اين صورت وابستگي ها مشخص مي شود

حالا من مي خواستم مثلا به صورت ريشه و درختي و يا سلسه ي پدر و فرزندي يك ركورد خاص رو نمايش بدم
يعني مثلا بيام اينطوري بيان كنم كه


a==>b==>c==>d


در ضمن تمام ريشه ها parent id شون null هست

عمق برگ ها هم متفاوت هست و حدي هم نداره

كسي مي تونه من و راهنمايي كنه

ممنونم از توجه شما

ali190
یک شنبه 14 آذر 1389, 18:58 عصر
باسلام
با vb کار میکنید؟
میتونید از treeview.selecteditem.fullpath برای شناسایی آدرس گره استفاده کنید و این مقدار رو بهمراه نام گره جدید به عنوان یکی از پرامترهای مشخصات گره در بانک ثبت کنید
یاعلی

S_O_S1982
یک شنبه 14 آذر 1389, 21:18 عصر
من با C# این کار رو می کنم
اما من می خوام اون گزارش رو به صورت کلی بگیرم نه اینکه با انتخاب هر گره

حمیدرضاصادقیان
دوشنبه 15 آذر 1389, 07:52 صبح
سلام.
لینکهای زیر رو نگاه کنید.
لینک 1 (http://www.mssqltips.com/tip.asp?tip=938)
لینک 2 (http://vyaskn.tripod.com/hierarchies_in_sql_server_databases.htm)
لینک 3 (http://www.sqlteam.com/article/more-trees-hierarchies-in-sql)

m_omrani
دوشنبه 15 آذر 1389, 20:07 عصر
اگه ديتابيس تون SQL 2005 به بالا باشه مي تونين از CTE به صورت زير استفاده کنيد:


DECLARE @ParentID INT

SET @ParentID = 1;

WITH CTENewsFolderTree (NewsFolderID,ParentID, Title, Depth)
AS
(
SELECT NewsFolderID,
ParentID,
CAST(Title AS NVARCHAR(MAX)) AS Title,
1 AS Depth
FROM NewsFolder
WHERE ParentID = @ParentID
UNION ALL
SELECT u.NewsFolderID,
u.ParentID,
cast(CTENewsFolderTree.Title + ' > ' + u.Title as nvarchar(max)) AS Title,
Depth + 1
FROM NewsFolder u
JOIN CTENewsFolderTree
ON u.ParentID = CTENewsFolderTree.NewsFolderID
)
SELECT c1.ParentID,
c1.NewsFolderID,
c1.Title + '>'
FROM CTENewsFolderTree c1



توضيح: جدولي داريم تحت عنوان NewsFolder که داراي کليد اصلي به نام NewsFolderID و کليد خارجي به نام ParentID به کليد اصلي خودش است. ريشه درختواره، رکوردي است که ParentID آن NULL است.

با اجراي اين پرس و جو، کليه فرزندان رکورد ريشه به همراه مسير کامل اونها در ستون Title نمايش داده مي شود.

در صورتي که بخواهيد يک رکورد خاص رو فيلتر کنيد، خيلي ساده کافي است به انتهاي پرس و جو، يک قسمت WHERE c1.NewsFolderID = @NewsFolderID اضافه کنيد.