PDA

View Full Version : پیمایش درخت با استفاده از SQL



arash_hemmat
یک شنبه 05 شهریور 1385, 03:26 صبح
سلام
من یک درخت شامل اطلاعات یک سیستم رو در دیتابیس ذخیره کردم و نیاز به عملیات پیمایش این درخت دارم و ترجیح میدم از دستورات SQL استفاده کنم ولی موفق نشدم کوئری مناسبی برای اینکار پیدا کنم.
برای سادگی کار درخت رو اینطور در نظر میگیریم که هر گره دارای دو گره راست و چپ و یک پدر هست به جدول زیر توجه کنید: (تصویری از همین درخت (http://hemmat.info/archive/tree.jpg))

---------------------------------------------------------
id name parent right_child left_child -
---------------------------------------------------------
1 ali 0 2 3 -
2 hasan 1 4 5 -
3 reza 1 null null -
4 saman 2 null null -
5 rahman 2 6 null -
6 hamed 5 null null -
---------------------------------------------------------

خوب حالا مثلا میخواهیم ببینیم که آیا hamed زیر مجموعه reza هست یا نه؟
یا اینکه آیا در زیر مجموعه های hasan کسی بنام hamed وجود داره یا نه؟
برای پاسخ دادن به این پرسشها ما نیاز به پیمایش درخت داریم ولی چطور؟؟؟!!!

kobari
یک شنبه 02 دی 1386, 14:25 عصر
SELECT a.name parent, b.name child FROM tree_table a, tree_table b
WHERE a.id = b.parent

yilmaz
پنج شنبه 17 اردیبهشت 1388, 12:19 عصر
WITH Parent AS
(
SELECT
ID,
ParentID,
Title AS Path,
FROM
Account
WHERE
ParentID IS NULL

UNION ALL

SELECT
TH.ID,
TH.ParentID,
CONVERT(nvarchar(طول Title), Parent.Path + ' > ' + TH.Title) AS Path,
FROM
Account TH
INNER JOIN
Parent
ON
Parent.ID = TH.ParentID
)
SELECT * FROM Parent