برای طرح سوال و دسترسی به آموزش ها سورس کدهای بیشتر به مجموعه xstack و یا به کانال ما در تلگرام کانال ما در تلگرام بپویندید.

مرتب سازی درختی در mysql

با سلام

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

مثلا ما جدولی با ستونهای زیر داریم

id,parent,name

 

کوئری ما به صورت زیر خواهد بود

select id,name from table order by COALESCE(parent,id),id

توجه:مقدار parent رکوردهای اصلی یا پدر را null در نظر میگیریم در غیر این صورت از تابع nullif برای تغییر مقدار parent به null استفاده میکنیم

مثال:اگر مقدار parent برای ایتم اصلی یا پدر ۰ در نظر بگیریم

select id,name from table order by COALESCE(nullif(parent,0),id),id

King of delphi and father of persian open source
نوشته ایجاد شد 18

5 دیدگاه در “مرتب سازی درختی در mysql

  1. سلام ، اعتراف میکنم از تابع بازگشتی استفاده میکردم 🙂
    میتونیم یه شرط بزاریم که مثلا از parent=17 به پایین درخت سلکت کنیم ؟

    1. سلام
      بله کافیه تو شرط بنویسین where parent>۱۷
      البته برای ساختار درختی بهترین روش استفاده از فیلد path یا depth هست
      که در مقاله ای دیگه بهش میپردازیم

      1. با این شرط تمام parent های بزرگتر از ۱۷ میاد ، در حالی که ممکنه پرنت های بزرگتر از ۱۷ شاخه دیگه ای باشن.
        من میخواستم بدونم میشه یک مسیر با شروع از پرند ۱۷ سلکت کرد ؟

        1. با سلام
          بله میشه شما باید به دیتابیستون یه فیلد دیگه به اسم path یا depth اضافه کنید مقدار این فیلد برابر مقدار path پرنت + id پرنت جاری میشه مثلا ایتم ۱۷ خودش دسته اصلی هست پس میتونه مقدار path اون ,۰, میشه خب حالا زیر مجموعه این دسته path اونها به این صورت میشه ,۰,۱۷, خب حالا اگه یکی از زیر مجموعه های ایتم ۱۷ ایدی ۲۴ باشه path زیر مجموعه ایدی ۲۴ به صورت ,۰,۱۷,۲۴, میشه حالا به راحتی با یه سلکت where path like ‘,0,17,%’ order by path میتونین فقط زیر مجموعه ۱۷ یا هر زیر مجموعه دیگه رو به صورت سورت شده بدست بیارید و با شمارش تعداد پرنت درون path میتونین جوری کد بنویسین که مثلا تا ۲ لول از زیر مجموعه ایتم ۱۷ رو بیاره
          _______________
          موفق و پیروز باشید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

نوشته های مرتبط

متنی که میخواهید برای جستجو وارد کرده و دکمه جستجو را فشار دهید. برای لغو دکمه ESC را فشار دهید.

بازگشت به بالا