পুনরাবৃত্ত স্ব স্ব যোগদান


15

আমার একটি commentsটেবিল রয়েছে, যা এটিকে সহজ করে তোলা যেতে পারে:

comments
=======
id
user_id
text
parent_id

যেখানে parent_idঅযোগ্য, তবে এটি তার পিতামাতার মন্তব্যের জন্য একটি মূল বিষয় হতে পারে।


এখন, আমি কীভাবে selectএকটি নির্দিষ্ট মন্তব্যের সমস্ত বংশধর হতে পারি ?
মন্তব্যগুলি কয়েক স্তরের নিচে হতে পারে ...

উত্তর:


16

হায়ারার্কিকাল ক্যোয়ারীগুলি , যেমনটি পুনরাবৃত্ত হওয়া অনুসন্ধানগুলি জানা যায়, মাইএসকিউএল সমর্থন করে না।

তারা তবে অন্যদের মধ্যে ওরাकल, মাইক্রোসফ্ট এসকিউএল সার্ভার, ডিবি 2, এবং পোস্টগ্রিসকিউএল সমর্থিত।

আপনার যদি কাজের ব্যস্ততার প্রয়োজন হয় তবে আপনি এখানে একটি গতিশীল (এবং সম্ভবত সম্ভাব্য বিপজ্জনক) কৌশল খুঁজে পেতে পারেন: /programming/8104187/mysql-hierarchical- ক্যোয়ারী

অ্যাডজেসেন্সি তালিকা (অর্থাত্ প্যারেন্ট কলাম) এর চেয়ে অন্যান্য মডেলগুলির সাথে কীভাবে শ্রেণিবিন্যাসের ডেটা সংরক্ষণ করা যায় সে সম্পর্কে আপনি এখানে একটি আলোচনাও পেতে পারেন : /programming/192220/ কি-is-the-most-efficient- মার্জিত একমুখী টু পার্স-এ-ফ্ল্যাট সারণীর-মধ্যে-এ-গাছ /

শুভকামনা!


আমি ভাবছি যে আপনার দ্বিতীয় লিঙ্কের সমাধানটি কীভাবে বিপজ্জনক হতে পারে। আপনি এটা ব্যাখ্যা করতে পারেন? অন্যথায়, সাইটে আপনাকে স্বাগতম!
dezso

3
@ ডিজেসো: কোয়েরো নিজেই কোয়েরো ক্রোয়েটার, কোয়াসনোই " * এটি আপগ্রেড-সেফ নয় * কারণ মাইএসকিউএল স্পষ্টভাবে সেশন ভেরিয়েবলের আচরণটি সংজ্ঞায়িত করে না। তবে, সময়োপযোগী অনুসারে ইন-কোয়েরিতে সংলগ্ন তালিকাগুলি মোকাবেলা করার একমাত্র উপায় ।" বিপজ্জনক একটি শব্দ খুব শক্তিশালী হতে পারে ( সম্ভাব্য অস্থির ?) তবে আমি সাবধানতার দিক থেকে ভুল করতে পছন্দ করি (আরও, আমি মাইএসকিউএল এর চেয়ে ওরাকলে আরও জ্ঞানী, তাই আমি অতিরিক্ত সতর্কতা অবলম্বন করতে চেয়েছিলাম)। স্বাগত জন্য ধন্যবাদ, যাইহোক! আমি এসই নেটওয়ার্কের দীর্ঘকালীন লুকার ছিলাম এবং আমি স্থির করেছিলাম যে কিছুটা ফেরত দেওয়ার সময় এসেছে।
ভালমায়ার

2
[পুনরুদ্ধারযোগ্য] সিনট্যাক্সের সাথে এখন মাইএসকিএল 8.0 থেকে সমর্থিত। dev.mysql.com/doc/refman/8.0/en/with.html
ClearCrescendo

6

এই টেবিল ডিজাইনটি হ'ল এসকিউএল অ্যান্টিপ্যাটার্টার "নিষ্পাপ গাছ", যেমন বিল কারভিন (তাঁর এসকিউএল অ্যান্টিপ্যাটার্নস স্ট্রাইক ব্যাক উপস্থাপনাটিতে স্লাইড 48 থেকে সজ্জিত ) বর্ণনা করেছেন। এই নকশার সমস্যাটি হ'ল নোডের সমস্ত বংশধর (বা পিতামাতাদের) পেতে সমস্যা with যেহেতু আপনি মাইএসকিউএল ব্যবহার করছেন আপনি অন্য আরডিবিএমএসে উপস্থিত সাধারণ টেবিল এক্সপ্রেশনগুলি (উইথ স্টেটমেন্ট এবং এটির রিসিভারসিভ মডিফায়ার) ব্যবহার করতে পারবেন না।

আপনি যা রেখে গেছেন তা হ'ল:

  • শ্রেণিবদ্ধ তথ্য কাঠামোর একটি বিকল্প বাস্তবায়ন ব্যবহার করুন ( এই প্রশ্নের উত্তর সম্ভবত এটির জন্য একটি ভাল রেফারেন্স হতে পারে)
  • গভীরতার সীমা সহ স্ব-যোগদানের ক্যোয়ারী তৈরি করুন। গভীরতার জন্য = 5 আপনি এই লাইনে কিছু ব্যবহার করতে পারেন:

    SELECT *
    FROM comments AS c1
      JOIN comments AS c2 ON (c2.parent_id = c1.id)
      JOIN comments AS c3 ON (c3.parent_id = c2.id)
      JOIN comments AS c4 ON (c4.parent_id = c3.id)
      JOIN comments AS c5 ON (c5.parent_id = c4.id)
  • একটি আরডিবিএমএস ব্যবহার করুন যা পুনরাবৃত্তির সাথে সমর্থন করে (যদিও এটি সম্ভবত বেশিরভাগ মানুষের পক্ষে বিকল্প নয়)


2
আমি এখানে বিল কার্বিনের সাথে একমত নই। সংলগ্ন মডেল কোনও বিরোধী- নিদর্শন নয় । একটি আধুনিক ডিবিএমএস সহ যা পুনরাবৃত্ত অনুসন্ধানগুলি সমর্থন করে (ওরাকল এটি 20 বছরেরও বেশি সময় ধরে সমর্থন করেছেন) যেমন একটি মডেল পুনরুদ্ধার এবং আপডেট করতে খুব দক্ষ ।
a_horse_with_no_name

5

মাইএসকিউএল আপনার প্রয়োজন মত পুনরাবৃত্ত অনুসন্ধানগুলি সমর্থন করে না।

আমি কিছুক্ষণ আগে যা করেছি তা হ'ল স্টোরড প্রসেসারস যা এটি করার জন্য মডেল সরবরাহ করে।

চাকাটি পুনরায় উদ্ভাবনের পরিবর্তে, আমি আপনাকে এটিতে আমার আগের পোস্টগুলির লিঙ্কগুলি দেব:

সংক্ষেপে, সঞ্চিত প্রক্রিয়াগুলি আমি কাতার প্রক্রিয়াকরণ ব্যবহার করে প্রিআর্ডার ট্রি ট্রভারসাল করি

  • GetParentIDByID
  • GetAncestry
  • GetFamilyTree

সমস্ত শিশুদের কাছে পিতামাতার (যেমন গেটফ্যামিলি ট্রি স্টোরেড পদ্ধতি)

  • STEP01) parent_idএকটি সারি দিয়ে শুরু করুন
  • STEP02) পরবর্তী parent_idহিসাবে বর্তমান হিসাবে চিহ্নিত করুন
  • STEP03) idবর্তমান রয়েছে এমন সমস্ত মান সন্ধান করুনparent_id
  • STEP04) মন্তব্য মুদ্রণ করুন বা সংগ্রহ করুন
  • STEP05) সারিটি খালি না থাকলে, যাও STEP02
  • STEP06) আপনি সম্পন্ন !!!

সকল সন্তানের কাছে সন্তানের (যেমন গেটএন্ট্রি স্টোরড পদ্ধতি)

  • STEP01) idএকটি সারি দিয়ে শুরু করুন
  • STEP02) পরবর্তী idহিসাবে বর্তমান হিসাবে চিহ্নিত করুন
  • STEP03) parent_idবর্তমানের মানটি সজ্জিত করুনid
  • STEP04) মন্তব্য মুদ্রণ করুন বা সংগ্রহ করুন
  • STEP05) সারিটি খালি না থাকলে, যাও STEP02
  • STEP06) আপনি সম্পন্ন !!!

বাস্তবায়ন দেখতে দয়া করে আমার অন্যান্য পোস্টে সঞ্চিত পদ্ধতিগুলি দেখুন।

একবার চেষ্টা করে দেখো !!!


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.