/
  • ایجاد دسته بندی موضوعی تو در تو و نمایش آن

  • ارسال پاسخ   امتیاز موضوع:
    • 2 رأی - میانگین امیتازات: 5
    • 1
    • 2
    • 3
    • 4
    • 5

    حالت موضوعی | حالت خطی ایجاد دسته بندی موضوعی تو در تو و نمایش آن
    نویسنده پیام
    php30 آفلاین
    عضو جدید
    **

    ارسال‌ها: 39
    تاریخ عضویت: ۱۳۹۴ خرداد ۷
    اعتبار: 0
    تشکرها : 19
    ( 0 تشکر در 0 ارسال )
    ارسال: #1
    ایجاد دسته بندی موضوعی تو در تو و نمایش آن
    سلام و خسته نباشید خدمت تمامی عزیزان

    من میخوام توی یک پروژه دسته بندی ایجاد کنم، دسته بندی موضوعی

    منتها اینا تو در تو هستند

    مثلا:

    1. کامپیوتر
    11. آموزشهای ICDL
    12. آموزش ویندوز
    2. شبکه
    21. اینترنت
    22. شبکه داخلی
    3. سخت افزار
    31. قطعات رایانه ای
    32. تعمیرات قطعات خراب
    33. خرید و فروش قطعات استوک

    اینو چطوری تو MYsql در نظر بگیرم، چطوری نمایش بدم
    مشکل من تحلیل و اجراست

    ممنون میشم کمکم کنید
    __________________________________________________________________________
    Huh مثلا خیلی با نمکی؟
    ۱۳۹۵ فروردين ۱۳ ۰۸:۴۱ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    mo_ali_2005 آفلاین
    عضو جدید
    **

    ارسال‌ها: 38
    تاریخ عضویت: ۱۳۹۳ مرداد ۱۵
    اعتبار: 2
    تشکرها : 3
    ( 19 تشکر در 14 ارسال )
    ارسال: #2
    RE: ایجاد دسته بندی موضوعی تو در تو و نمایش آن
    ایجاد یک ساختار درختی در دیتابیس نسبتا ساده است و شامل دو نکته می باشد: نکته اول در ساخت جدول: جدول تنها باید یک فیلد برای parent_id و احتمال یک فیلد level داشته باشید. نکته دوم در مورد تصمیم در خصوص قیدهای مربوط به کلید خارجی می باشد. چون جدول با خودش ارتباط دارد و parent_id کلید خارجی جدول از خودش است، قیدهای مربوط به delete و update باید در نظر گرفته شوند (البته برخی به جای این کار از تریگر استفاده می کنند و برخی هم آن را به طراحی واسط کاربر موکول می کنند.) در ادامه به صورت مختصر و با فرض انتقال نکته دوم به واسط کاربر برخی نکات رو توضیح می دیم.
    برای این کار باید یک ساختار درختی ایجاد کنی، در دیتابیس هر مجموعه داده در قالب جدول ها پیاده سازی می شده برای این کار باید در جدولت علاوه بر ستون های معمول که شامل نام و مشخصات هر کروه هست یک id , و یک فیلد parent هم باید داشته باشی، قسمت مهم این است که آیا می خواهید تعداد سطوح مشخص باشد مثلا دو سطح یا سه سطح، یا این که نامحدود باشد و هر تعداد زیر دسته و در سطوح مختلف قابل ایجاد باشد. پاسخ این سوال در بهینه سازی و ساده سازی الگوریتم های مربوط به ویرایش دسته ها بسیار حایز اهمیت است.
    برای ریشه (اولین سطح دسته بندی) parent برابر 0 می باشد و برای دسته های دیگر parent برابر id والد می باشد.
    به عنوان مثال برای مثالی که خودت دادی
    کد PHP:
    -----------------------------------------------------------------
    |    
    id    |    name    |    parent_id    |
    -----------------------------------------------------------------
    |    
    1    |    computer|    0    |
    -----------------------------------------------------------------
    |    
    2    |    network    |    0    |
    -----------------------------------------------------------------
    |    
    11    |    icdl     |    1    |
    -----------------------------------------------------------------
    |    
    21    |    internet    |    2    |
    -----------------------------------------------------------------
    |    
    3    |    hardware    |    0    |
    ----------------------------------------------------------------- 
    گاهی اوقات برای بهینه سازی و ساده تر کردن الگوریتم های مربوط به ویرایش یک فیلد level هم در نظر گرفته می شود. این فیلد الگوریتم های مربوط به انتخاب و اضافه کردن دسته را کمی پیچیده تر می کند ولی الگوریتم های ویرایش را بسیار ساده تر می کند (بخصوص اگر تعداد سطح ها محدود و کم باشد)
    برای اضافه کردن یک مورد جدید باید همراه با نام و id خود محصول id والد هم وارد شود (معمولا انتخاب والد در برنامه نویسی واسط کاربر مثلا با php ) لحاظ می شود.
    اگر بخواهیم زیر دسته های یک دسته مشخص با id=1 را پیدا کنیم (زیر دسته های اصلی گروه کامپیوتر) بسیار آسان و با کوئری زیر امکان پذیر است:
    SELECT * FROM tabe WHERE parent_id=1
    تغییر دسته پدر هم آسان است و فقط با تغییر parent_id با یک کوئری ساده update انجام می شود
    سخت ترین قسمت مربوط به حذف یک دسته است. چون باید تصمیم بگیریم آیا تمام زیردسته ها باید همراه با حذف دسته اصلی حذف شود یانه ؟ اگر خیر چه بلایی باید سرشان بیاید؟ و اگر تمام زیر دسته ها حذف شوند چطور بتوانیم آن ها را پیدا کنیم (وقتی تعداد سطوح کم است مثلا دو سطح یا سه سطح یا چهار سطح یافتن تمام زیر دسته ها نسبتا آسان است).
    بخش دشوار بعدی باز هم مربوط به انتخاب زیر دسته ها است اما این بار انتخاب تمام زیر دسته ها، فرض کنید در برنامه یا سایتتان باید یک منوی باز شو داشته باشید که تمامی زیردسته های یک دسته را در تمامی سطوح نمایش بدهید. این جا باز محدود بودن سطوح کمک می کند که الگوریتم انتخاب آسان تر باشد اما نامحدود بودن باعث پیچیدگی شدیدی می شود و حلقه های تو درتوی پیچیده در (و یا توابع بازگشتی سنگین) را در بخش ایجاد واسط کاربری لازم می دارد.
    ۱۳۹۵ فروردين ۱۴ ۱۲:۳۱ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : php30
    php30 آفلاین
    عضو جدید
    **

    ارسال‌ها: 39
    تاریخ عضویت: ۱۳۹۴ خرداد ۷
    اعتبار: 0
    تشکرها : 19
    ( 0 تشکر در 0 ارسال )
    ارسال: #3
    RE: ایجاد دسته بندی موضوعی تو در تو و نمایش آن
    (۱۳۹۵ فروردين ۱۴ ۱۲:۳۱ عصر)mo_ali_2005 نوشته شده توسط:  ایجاد یک ساختار درختی در دیتابیس نسبتا ساده است و شامل دو نکته می باشد: نکته اول در ساخت جدول: جدول تنها باید یک فیلد برای parent_id و احتمال یک فیلد level داشته باشید. نکته دوم در مورد تصمیم در خصوص قیدهای مربوط به کلید خارجی می باشد. چون جدول با خودش ارتباط دارد و parent_id کلید خارجی جدول از خودش است، قیدهای مربوط به delete و update باید در نظر گرفته شوند (البته برخی به جای این کار از تریگر استفاده می کنند و برخی هم آن را به طراحی واسط کاربر موکول می کنند.) در ادامه به صورت مختصر و با فرض انتقال نکته دوم به واسط کاربر برخی نکات رو توضیح می دیم.
    برای این کار باید یک ساختار درختی ایجاد کنی، در دیتابیس هر مجموعه داده در قالب جدول ها پیاده سازی می شده برای این کار باید در جدولت علاوه بر ستون های معمول که شامل نام و مشخصات هر کروه هست یک id , و یک فیلد parent هم باید داشته باشی، قسمت مهم این است که آیا می خواهید تعداد سطوح مشخص باشد مثلا دو سطح یا سه سطح، یا این که نامحدود باشد و هر تعداد زیر دسته و در سطوح مختلف قابل ایجاد باشد. پاسخ این سوال در بهینه سازی و ساده سازی الگوریتم های مربوط به ویرایش دسته ها بسیار حایز اهمیت است.
    برای ریشه (اولین سطح دسته بندی) parent برابر 0 می باشد و برای دسته های دیگر parent برابر id والد می باشد.
    به عنوان مثال برای مثالی که خودت دادی
    کد PHP:
    -----------------------------------------------------------------
    |    
    id    |    name    |    parent_id    |
    -----------------------------------------------------------------
    |    
    1    |    computer|    0    |
    -----------------------------------------------------------------
    |    
    2    |    network    |    0    |
    -----------------------------------------------------------------
    |    
    11    |    icdl     |    1    |
    -----------------------------------------------------------------
    |    
    21    |    internet    |    2    |
    -----------------------------------------------------------------
    |    
    3    |    hardware    |    0    |
    ----------------------------------------------------------------- 
    گاهی اوقات برای بهینه سازی و ساده تر کردن الگوریتم های مربوط به ویرایش یک فیلد level هم در نظر گرفته می شود. این فیلد الگوریتم های مربوط به انتخاب و اضافه کردن دسته را کمی پیچیده تر می کند ولی الگوریتم های ویرایش را بسیار ساده تر می کند (بخصوص اگر تعداد سطح ها محدود و کم باشد)
    برای اضافه کردن یک مورد جدید باید همراه با نام و id خود محصول id والد هم وارد شود (معمولا انتخاب والد در برنامه نویسی واسط کاربر مثلا با php ) لحاظ می شود.
    اگر بخواهیم زیر دسته های یک دسته مشخص با id=1 را پیدا کنیم (زیر دسته های اصلی گروه کامپیوتر) بسیار آسان و با کوئری زیر امکان پذیر است:
    SELECT * FROM tabe WHERE parent_id=1
    تغییر دسته پدر هم آسان است و فقط با تغییر parent_id با یک کوئری ساده update انجام می شود
    سخت ترین قسمت مربوط به حذف یک دسته است. چون باید تصمیم بگیریم آیا تمام زیردسته ها باید همراه با حذف دسته اصلی حذف شود یانه ؟ اگر خیر چه بلایی باید سرشان بیاید؟ و اگر تمام زیر دسته ها حذف شوند چطور بتوانیم آن ها را پیدا کنیم (وقتی تعداد سطوح کم است مثلا دو سطح یا سه سطح یا چهار سطح یافتن تمام زیر دسته ها نسبتا آسان است).
    بخش دشوار بعدی باز هم مربوط به انتخاب زیر دسته ها است اما این بار انتخاب تمام زیر دسته ها، فرض کنید در برنامه یا سایتتان باید یک منوی باز شو داشته باشید که تمامی زیردسته های یک دسته را در تمامی سطوح نمایش بدهید. این جا باز محدود بودن سطوح کمک می کند که الگوریتم انتخاب آسان تر باشد اما نامحدود بودن باعث پیچیدگی شدیدی می شود و حلقه های تو درتوی پیچیده در (و یا توابع بازگشتی سنگین) را در بخش ایجاد واسط کاربری لازم می دارد.

    بابت راهنمائی تون بسیار سپاسگذارم

    میشه یه مثال یا یه نمونه کدی در اختیارم قرار بدین، ممنون میشم

    تصویر
    http://s7.picofile.com/file/8252691068/Untitled.png

    سپاس از شما
    __________________________________________________________________________
    Huh مثلا خیلی با نمکی؟
    ۱۳۹۵ خرداد ۴ ۱۲:۳۸ صبح
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    « قدیمی تر | تازه‌ تر »

    ارسال پاسخ
    پرش به انجمن:


    کاربرانِ درحال بازدید از این موضوع: 1 مهمان
    IranPHP.org | تماس با ما | بازگشت به بالا | بازگشت به محتوا | بایگانی | پیوند سایتی RSS