رفتن به مطلب

Question پیمایش درختی در دیتابیس | Managing Hierarchical Data in MySQL


پست های پیشنهاد شده

با سلام و احترام دوستان و اساتید عزیز من در حال نوشتن یک سی ام اس هستم در نمایش و ایجاد کتگوری ها برای زیر دسته و شاخه های تو در تو خیلی سرچ زدم منابع انگلیسی بسیار هست ولی فارسی اصلا نیست نمیدونم چرا ما ها اگه چیزی بلدیم هیچ وقت نمیایم یه آموزش جامع بنویسیم کم پیش میاد در کل

خلاصه دوستان عزیز من یک منبع انگلیسی پیدا کردم که فکر میکنم خیلی خوب و کامل یک روش رو گفته ولی من انگلیسیم قوی نیست میخوام از دوستان کمکم کنن

لینکی:
http://mikehillyer.com/articles/mana...data-in-mysql/

لینک به ارسال

برای ساختار درختی معمولا 4 روشهای مختلفی

  • Adjacency List
  • Path Enumeration
  • Nested Sets
  • Closure Table

من به شخصه از روش دوم استفاده میکنم به نظرم دردسرش کمتره

لینک به ارسال

سلام ممنون زحمت کشیدی وقت گذاشتید و پاسخ دادید یه خاهش میشه یه مسال بزنی

 

لینک به ارسال

هر کدوم که منابع کمتری مصرف میکنه و سرعت بیشتری داره

لینک به ارسال

در کل جالبه که تو انجمن های تخصصی برنامه نویسی سوال میکنی راهنمایی نمیکنن ولی همیشه این انجمن کار منو راه انداخته :wub:

لینک به ارسال

دوستان جناب lord_viper ظاهرا چند وقتیه نیامدن کسی دیگر نمیتواند کمیکی بکند :wacko:

 

لینک به ارسال

از روش Nested Sets استفاده نکردم فقط میدونم چطور کار میکنه روش جالبیه

در روش Path Enumeration شما فیلدهاتون به صورت زیر میشه

id

category

parent_id

path

تو قسمت path لیست پرنتهای اون دسته قرار میگیره
مثلا

id,category- pid,path
1--category1--0--,0,
2--sub_cate1--1--,0,1,
3--sub_cate2--1--,0,1,
4--sub_cat11--2--,0,1,2,
5--sub_cat41--4--,0,1,2,4

 

خب در این حالت  شما با یک select like میتونین لیست زیر دسته های یک دسته رو بدست بیارین

با شمردن تعداد کاما ها , و منهای 2 مقدار depth اون دسته بندی بدست میاد و شما خیلی راحت میتونین یک لول زیر دسته هر دسته رو جدا کنید

و با یک ORDER BY COALESCE هم همه زیر هم ردیف میشن

البته در هر حالت شما با در دست داشتن pid با یک تابع بازگشتی میتونین ساختار درختی رو پیاده سازی کنید

مثال

function tree($lists=array(),$pid=0){
$out = '<ul class="main_tree">' ;
foreach($lists as $list){
    if($list['pid']==$pid){
        $out = "<li>{$list['category']}";
        $ret = tree($lists,$list['id']);
        if(!empty($ret))
        $out .="<ul>$ret</ul>";
        $out.='</li>';
    }
}
return $out.'</ul>';
}

 

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...