/
  • واکشی داده ها با join (داده های سلسله مراتبی)

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

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

    ارسال‌ها: 38
    تاریخ عضویت: ۱۳۹۲ شهريور ۳
    اعتبار: 0
    تشکرها : 14
    ( 4 تشکر در 4 ارسال )
    ارسال: #1
    واکشی داده ها با join (داده های سلسله مراتبی)
    جدول یک cms پرسش و پاسخ رو بررسی میکردم به موضوع جالبی برخوردم به اسم داده های سلسله مراتبی
    فرض کنید داده ها درون جدول به صورت زیر ذخیره شده باشند

    کد:
    +------+----------+-------+
    |  id  | parentid | type  |
    +------+----------+-------+
    |  1   |     0    |   Q   |
    +------+----------+-------+
    |  2   |     1    |   A   |
    +------+----------+-------+
    |  3   |     0    |   Q   |
    +------+----------+-------+
    |  4   |     2    |   C   |
    +------+----------+-------+
    |  5   |     2    |   C   |
    +------+----------+-------+
    |  6   |     1    |   A   |
    +------+----------+-------+
    |  7   |     3    |   C   |
    +------+----------+-------+
    |  8   |     1    |   C   |
    +------+----------+-------+
    |  9   |     0    |   Q   |
    +------+----------+-------+
    |  10  |     9    |   C   |
    +------+----------+-------+
    |  11  |     9    |   A   |
    +------+----------+-------+
    |  12  |    11    |   C   |
    +------+----------+-------+

    a جواب q سوال , c کامنتهای پرسش یا پاسخ هستند وقتی id=1 واکشی میشه قطعا تمام پاسخ ها و کامنتهای مربوط به این پاسخ ها و پرسش نیز واکشی میشن .

    برای مثال اگه بخوایم پرسش یک و تمام پاسخ ها و کامنتهای وابسته (مرتبط) رو واکشی کنیم :

    کد:
    +------+----------+-------+
    |  id  | parentid | type  |
    +------+----------+-------+
    |  1   |     0    |   Q   |
    +------+----------+-------+
    |  8   |     1    |   C   |
    +------+----------+-------+
    |  2   |     1    |   A   |
    +------+----------+-------+
    |  4   |     2    |   C   |
    +------+----------+-------+
    |  5   |     2    |   C   |
    +------+----------+-------+
    |  6   |     1    |   A   |
    +------+----------+-------+
    به چنین خروجی چطور می تونیم دست پیدا کنیم؟چندجا سوالا پرسیدم فقط به واکشی با join اشاره کردن ولی هنوز نتونستم کئری صحیحی براش بنویسم
    یه سوال دیگه هم دارم اینکه چهار روش کلی برای واکشی همچین داده های پیشنهاد شده بود
    Adjacency list
    Nested sets
    Path enumeration
    Closure table

    کدوم راه بهتره ؟
    هرچند جدول بالا ظاهرا بر اساس راه اول طراحی شده
    __________________________________________________________________________
    هيچ اگر سايه پذيرد منم آن سايه هيچ
    ۱۳۹۳ شهريور ۵ ۰۸:۴۰ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    Alaa غایب
    علا عالم فلکی
    ***

    ارسال‌ها: 945
    تاریخ عضویت: ۱۳۹۲ فروردين ۲۰
    اعتبار: 52
    تشکرها : 745
    ( 663 تشکر در 478 ارسال )
    ارسال: #2
    RE: واکشی داده ها با join (داده های سلسله مراتبی)
    دوتا اون وسط parentid شون ۲ هست، این منطق برنامه هست ؟‌‌ ( اگه آره بیشتر توضیح میدین راجع به رابطه ها ؟‌ )
    اگه نه ( مثلا اشتباه تایپی بود ) خب مشکل شما با join کردن چی هست ؟
    __________________________________________________________________________
    ۱۳۹۳ شهريور ۵ ۱۰:۳۱ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    majid1605 آفلاین
    عضو جدید
    **

    ارسال‌ها: 38
    تاریخ عضویت: ۱۳۹۲ شهريور ۳
    اعتبار: 0
    تشکرها : 14
    ( 4 تشکر در 4 ارسال )
    ارسال: #3
    RE: واکشی داده ها با join (داده های سلسله مراتبی)
    همونطور که گفتم جدول یک cms پرسش و پاسخه و فیلد parentid ای دی نوشته های مرتبط با هم رو ذخیره میکنه
    به طور مثال برای سوال (id=1) دوتا پاسخ و یک کامنت وجود داره parentid=1 و همچنین برای پاسخ (id=2) دوتا کامنت وجود داره parentid=2
    حالا من میخوام بدونم چطور یه خروجی مانند جدول شماره 2 می تونم داشته باشم که اطلاعات به صورت مرتب شده باشند یعنی ابتدا خود سوال بعد اگه کامنتی مربوط به سواله واکشی (تووی سوال یک ای دی کامنت 8 هست ) بعد پاسخها و کامنتهای مربوط به هر پاسخ و...
    __________________________________________________________________________
    هيچ اگر سايه پذيرد منم آن سايه هيچ
    (آخرین ویرایش در این ارسال: ۱۳۹۳ شهريور ۵ ۱۱:۳۰ عصر، توسط majid1605.)
    ۱۳۹۳ شهريور ۵ ۱۱:۲۹ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    esmahdi آفلاین
    عضو
    ***

    ارسال‌ها: 116
    تاریخ عضویت: ۱۳۹۰ مهر ۱۴
    اعتبار: 0
    تشکرها : 34
    ( 21 تشکر در 10 ارسال )
    ارسال: #4
    RE: واکشی داده ها با join (داده های سلسله مراتبی)
    سلام
    هر چند من از این ساختارش اصلا خوشم نیومده ولی راه حل به شکل زیره به نظرم:
    باید یک master id تعریف بشه تا بشه کل پست های مربوط به سوال رو استخراج کرد وگر نه مجبوری از حلقه های تو در توی پیچیده استفاده کنی.
    اگه این master id تعریف بشه می تونی مثلا همه رو با ذکر نوع تو یه آرایه بذاری بعد به ترتیب زمان ارسال کنی تو نمایشش هم داده ها رو بر اساس نوعشون نمایش بدی.

    من تا حالا چنین ساختاری ندیدم ولی به نظرم معقول ترین کار اینه که مثلا سوال ها تو یه جدول باشه، جواب ها تو یه جدول و کامنت ها تو جدول دیگه.
    اینجوری جستجو کردن تو مقدار خاصی راحت تر می شه. به نظرم فشار به سرور هم کاهش پیدا می کنه.
    ۱۳۹۳ شهريور ۲۲ ۱۲:۰۳ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    majid1605 آفلاین
    عضو جدید
    **

    ارسال‌ها: 38
    تاریخ عضویت: ۱۳۹۲ شهريور ۳
    اعتبار: 0
    تشکرها : 14
    ( 4 تشکر در 4 ارسال )
    ارسال: #5
    RE: واکشی داده ها با join (داده های سلسله مراتبی)
    این ساختار مربوط به question2answer هستش کوپری زیر رو هم استفاده کردم تقریبا کار میکنه
    http://sqlfiddle.com/#!2/20180/3
    به نظرتون فراخوانی از چند جدول مختلف کار درستیه ؟
    چون ممکنه جداول دیگه ایی هم وجود داشته باشه که به همراه هر پست باید فراخوانی بشه،جدول کاربران ،امتیاز،سوال،پاسخ،کامنت و....
    __________________________________________________________________________
    هيچ اگر سايه پذيرد منم آن سايه هيچ
    ۱۳۹۳ شهريور ۲۲ ۱۲:۲۴ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    « قدیمی تر | تازه‌ تر »

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


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