• 2 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
ایجاد دسته بندی موضوعی تو در تو و نمایش آن
#1
سلام و خسته نباشید خدمت تمامی عزیزان

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

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

مثلا:

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

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

ممنون میشم کمکم کنید
Huh مثلا خیلی با نمکی؟
  پاسخ
تشکر شده توسط :
#2
ایجاد یک ساختار درختی در دیتابیس نسبتا ساده است و شامل دو نکته می باشد: نکته اول در ساخت جدول: جدول تنها باید یک فیلد برای parent_id و احتمال یک فیلد level داشته باشید. نکته دوم در مورد تصمیم در خصوص قیدهای مربوط به کلید خارجی می باشد. چون جدول با خودش ارتباط دارد و parent_id کلید خارجی جدول از خودش است، قیدهای مربوط به delete و update باید در نظر گرفته شوند (البته برخی به جای این کار از تریگر استفاده می کنند و برخی هم آن را به طراحی واسط کاربر موکول می کنند.) در ادامه به صورت مختصر و با فرض انتقال نکته دوم به واسط کاربر برخی نکات رو توضیح می دیم.
برای این کار باید یک ساختار درختی ایجاد کنی، در دیتابیس هر مجموعه داده در قالب جدول ها پیاده سازی می شده برای این کار باید در جدولت علاوه بر ستون های معمول که شامل نام و مشخصات هر کروه هست یک id , و یک فیلد parent هم باید داشته باشی، قسمت مهم این است که آیا می خواهید تعداد سطوح مشخص باشد مثلا دو سطح یا سه سطح، یا این که نامحدود باشد و هر تعداد زیر دسته و در سطوح مختلف قابل ایجاد باشد. پاسخ این سوال در بهینه سازی و ساده سازی الگوریتم های مربوط به ویرایش دسته ها بسیار حایز اهمیت است.
برای ریشه (اولین سطح دسته بندی) parent برابر 0 می باشد و برای دسته های دیگر parent برابر id والد می باشد.
به عنوان مثال برای مثالی که خودت دادی
کد پی‌اچ‌پی:
-----------------------------------------------------------------
|    
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 انجام می شود
سخت ترین قسمت مربوط به حذف یک دسته است. چون باید تصمیم بگیریم آیا تمام زیردسته ها باید همراه با حذف دسته اصلی حذف شود یانه ؟ اگر خیر چه بلایی باید سرشان بیاید؟ و اگر تمام زیر دسته ها حذف شوند چطور بتوانیم آن ها را پیدا کنیم (وقتی تعداد سطوح کم است مثلا دو سطح یا سه سطح یا چهار سطح یافتن تمام زیر دسته ها نسبتا آسان است).
بخش دشوار بعدی باز هم مربوط به انتخاب زیر دسته ها است اما این بار انتخاب تمام زیر دسته ها، فرض کنید در برنامه یا سایتتان باید یک منوی باز شو داشته باشید که تمامی زیردسته های یک دسته را در تمامی سطوح نمایش بدهید. این جا باز محدود بودن سطوح کمک می کند که الگوریتم انتخاب آسان تر باشد اما نامحدود بودن باعث پیچیدگی شدیدی می شود و حلقه های تو درتوی پیچیده در (و یا توابع بازگشتی سنگین) را در بخش ایجاد واسط کاربری لازم می دارد.
  پاسخ
تشکر شده توسط : php30
#3
(۱۳۹۵ فروردین ۱۴, ۰۱:۳۱ ب.ظ)mo_ali_2005 نوشته: ایجاد یک ساختار درختی در دیتابیس نسبتا ساده است و شامل دو نکته می باشد: نکته اول در ساخت جدول: جدول تنها باید یک فیلد برای parent_id و احتمال یک فیلد level داشته باشید. نکته دوم در مورد تصمیم در خصوص قیدهای مربوط به کلید خارجی می باشد. چون جدول با خودش ارتباط دارد و parent_id کلید خارجی جدول از خودش است، قیدهای مربوط به delete و update باید در نظر گرفته شوند (البته برخی به جای این کار از تریگر استفاده می کنند و برخی هم آن را به طراحی واسط کاربر موکول می کنند.) در ادامه به صورت مختصر و با فرض انتقال نکته دوم به واسط کاربر برخی نکات رو توضیح می دیم.
برای این کار باید یک ساختار درختی ایجاد کنی، در دیتابیس هر مجموعه داده در قالب جدول ها پیاده سازی می شده برای این کار باید در جدولت علاوه بر ستون های معمول که شامل نام و مشخصات هر کروه هست یک id , و یک فیلد parent هم باید داشته باشی، قسمت مهم این است که آیا می خواهید تعداد سطوح مشخص باشد مثلا دو سطح یا سه سطح، یا این که نامحدود باشد و هر تعداد زیر دسته و در سطوح مختلف قابل ایجاد باشد. پاسخ این سوال در بهینه سازی و ساده سازی الگوریتم های مربوط به ویرایش دسته ها بسیار حایز اهمیت است.
برای ریشه (اولین سطح دسته بندی) parent برابر 0 می باشد و برای دسته های دیگر parent برابر id والد می باشد.
به عنوان مثال برای مثالی که خودت دادی
کد پی‌اچ‌پی:
-----------------------------------------------------------------
|    
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 مثلا خیلی با نمکی؟
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان