• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل در تیبل بندی و ارتباط بین رکورد ها !
#1
Sad 
سلام دوستان ، خسته نباشید ،
یک سیسیتم دارم مینویسم که مربوط میشه به بازاریابی برای فروش کتاب و اینجور اجناس ،
به یک مشکل برخوردم ، اول توضیح میدم که سیستم چیه تا بعد مشکل رو مطرح کنم . . .
این سیستم سمت کاربر فعلاً چیزی نداره یعنی همه چیز عملاً دست مدیر هست ( تعریف کاربر ، حذف و هر کار دیگه )
حالا در این سیستم بازاریابی ( که شبیه سیستم های هرمی هست ) 10 مرحله داریم ، هر یوزر میتونه 10 نفر رو معرفی کنه و همینطور هر زیرمجموعه هم میتونه 10 نفر رو معرفی کنه و الی آخر . . .
خُب برای این قسمت دوتا تیبل تعریف کردم :

users-->Name,Email....,Sub1,Sub2...Sub2,Num_Sub
sub_Users-->inviter_ID,user_ID
خُب ، تیبل اول که مشخصات همه کاربران هست ، SubX هم میشه زیر مجموعه ها از 1 تا 10 کاربر و num_sub هم تعداد زیر مجموعه هاش !
sub_users هم که شناسه دعوت کننده ، شناسه خود یوزر . . .



حالا تا اینجا مشکلی نیست ، حالا نیاز هست مثلا کاربری با شماره 11110 رو از بانک اطلاعاتی فرابخونیم و بعد از اون 10 زیر مجموعش رو هم بخوایم ، تا اینجا میایم فقط از تیبل Users اطلاعات رو میخونیم
اما حالا میخوایم همین کاربر با یوزرهای سطح 1 و سطح 2 اون رو فراخونی کنیم
( یعنی هم زیر مجموعه های خود یوزر و هم زیر مجموعه های زیرمجموعه هاش رو . . )


من در این دو موضوع مشکل دارم ، اینکه مثلا چطور میتونم زیر مجموعه های سطح 1 تا n ، کاربر رو فراخونی کنم و نمایش بدم ، و دوم اینکه چطور تعیین کنم مثلا n تا کاربر در سطح 1 دارم ، n تا در سطح 2 ، n تا در سطح 3 . . .

من هرطور هم که فکر کردم که از اول شروع کنم و تیبل بندی رو تغییر بدم ، به روش صحیحی برای تیبل ها نرسیدم .


ممنون میشم راهنمایی کنید .
سپاس
  پاسخ
تشکر شده توسط :
#2
اولا در طراحی جدول مشکل داری و با افزونی داده مواجه خواهی شد.
به جای sub1 sub2 sub... می تونی یک فیلد داشته باشی که شماره های زیرمجموعه ها بصورت آرایه توش ذخیره بشن.
ولی در مورد سوالت باید بگم که باید از حلقه استفاده کنی
مثلا حلقه رو تا 3 مرحله زیرمجموعه ادامه بدی
برای مثال اول کاربری رو انتخاب می کنی و زیر مجموعه های اون رو از دیتابیس فراخوانی می کنی. در مرحله اول زیرمجوعه های زیرمجموعه های کاربر رو توسط یک حلقه فراخوانی می کنی و بعد توسط حلقه دوم که داخل حلقه اول هست زیر مجموعه های زیرمجموعه های زیرمجموعه های کاربر رو بدست میاری
البته روش های بهتری هم هست.. یعنی اگر یکم بیشتر فکر کنی کارت با یک حلقه حل می شه
  پاسخ
تشکر شده توسط : niman2d zoghal
#3
سلام ،
ممنونم که پاسخ دادید ،
حقیقتش اینکه متوجه موضوع « به جای sub1 sub2 sub... می تونی یک فیلد داشته باشی که شماره های زیرمجموعه ها بصورت آرایه توش ذخیره بشن. » اصلا نشدم ، ممنون میشم با این موضوع آشنام کنید .

--- منظورتون این هست که تعداد اعضا رو مثلا در یا آرایه بریزم بعد اون آرایه رو در یک فیلد جای بدم ؟ و هر دفعه که خواستم زیر مجموعه جدید اضافه کنم ، آرایه رو فرابخونم ، بهش اضافه کنم و وارد دیتابیس کنم ؟

بحث حلقه هم من با 3 تا حلقه سعی کردم ،
حلقه اول : به تعداد زیر مجموعه های یوزر مورد نظر انجام میشه
حلقه دوم : به تعداد اینکه چند Level رو لازم داریم تکرار میشه ( مثلا 2 یا 3 لول زیر مجموعه )
حلقه سوم : به تعداد زیر مجموعه های زیرمجموعه تکرار میشه



اما به نظرم بهینه نیست . . . و کاملاً گیج کننده شده !
واقعا ممنونم از کمکتون
سپاسگذارم
  پاسخ
تشکر شده توسط :
#4
من که بهت توضیح دادم!!!!Big Grin
خودمم Newjustsend

بیا یاهو بهت بگم....Wink
  پاسخ
تشکر شده توسط :
#5
خب اینجا بگید تاپیک ناتموم نمونه
  پاسخ
تشکر شده توسط : zoghal niman2d
#6
برای اینگونه سیستم ها شما باید از ساختار درختی استفاده کنید.
بدین صورت که هر نود که وارد سیستم میشه باید مشخصات نود پدرش رو داشته باشه

کد:
tree [id,parent_id,other fields]


این ساختار برای کارهای کوچیک خوب هست اما برای کار های بزرگ و ساختار درختی با عمق N بهتره از روش BTree استفاده بشه که الگوریتم معروف در این زمینه hierarchical-data هست که لینک زیر کامل توضیح داده این موضوع رو

نقل قول:http://dev.mysql.com/tech-resources/arti...-data.html
  پاسخ
تشکر شده توسط : niman2d
#7
(۱۳۸۹ مرداد ۱۷, ۱۱:۵۶ ب.ظ)faghani نوشته: من که بهت توضیح دادم!!!!Big Grin
خودمم Newjustsend

بیا یاهو بهت بگم....Wink

سلامBig Grin
آره خُب ، اما یک مشکلی پیش اومد ، حالا باهات صحبت میکنم :دی Heart
(۱۳۸۹ مرداد ۱۸, ۰۶:۳۱ ب.ظ)zoghal نوشته: برای اینگونه سیستم ها شما باید از ساختار درختی استفاده کنید.
بدین صورت که هر نود که وارد سیستم میشه باید مشخصات نود پدرش رو داشته باشه

کد:
tree [id,parent_id,other fields]


این ساختار برای کارهای کوچیک خوب هست اما برای کار های بزرگ و ساختار درختی با عمق N بهتره از روش BTree استفاده بشه که الگوریتم معروف در این زمینه hierarchical-data هست که لینک زیر کامل توضیح داده این موضوع رو

نقل قول:http://dev.mysql.com/tech-resources/arti...-data.html

سلام ، ممنون واقعا ، لطف کردید . . .
میشه خودتون هم کمی در مورد این الگوریتم توضیحات بدید ؟
( گوگل سرچ کردم اما مطلب جالبی پیدا نشد . . . )

سپاس
  پاسخ
تشکر شده توسط :
#8
لینک براتون گزاشتم که هم کد و هم طراحی دیتا بیس رو توضیح داده؟ من چیو توضیح بدم؟
  پاسخ
تشکر شده توسط :


پرش به انجمن:


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