PHP-তে ডেটার আত্মীয়তার সম্পর্ক

ধরুন আমাদের সামনে বাবা এবং ছেলেদের সংরক্ষণের কাজ রয়েছে। ধরুন প্রতিটি বাবার শুধুমাত্র একটি ছেলে থাকতে পারে, আর ছেলে আবার তার একটি ছেলে থাকতে পারে।

আমাদের ভাবতে হবে কিভাবে আমরা ডেটা সংরক্ষণ করব। প্রথম ধারণা যা মাথায় আসতে পারে - দুটি টেবিল তৈরি করা: parents বাবাদের জন্য এবং sons ছেলেদের জন্য। তারপর এই টেবিলগুলিকে কোনো ফিল্ড দিয়ে সংযুক্ত করা: son_id বা parent_id।

যাইহোক, এই ধারণাটি খুব ভাল নয় - কারণ একই ব্যক্তি একই সাথে বাবা এবং ছেলে উভয়ই হতে পারে - এবং তাকে উভয় টেবিলে সংরক্ষণ করতে হবে, আর এটি অসুবিধাজনক, বেশি জায়গা নেয় এবং সহজেই ভুলের দিকে নিয়ে যায়।

আরও ভাল বিকল্প হল টেবিলটিকে নিজের সাথে সংযুক্ত করা: আসুন একটি users টেবিল তৈরি করি, এতে সকল ব্যবহারকারী সংরক্ষণ করব এবং প্রত্যেকের জন্য একটি son_id ফিল্ড তৈরি করব, যাতে এই একই টেবিল থেকে ছেলের id সংরক্ষিত থাকবে:

users
id name son_id
1 user1 2
2 user2 3
3 user3 null

কোয়েরি

এখন এমন একটি কোয়েরি লিখি যা ব্যবহারকারীকে তার ছেলেসহ বের করে আনবে।

প্রথমে শুধু ব্যবহারকারীদের বের করে আনি:

sqlSELECT
  *
FROM
  users

এখন ব্যবহারকারীদের সাথে তাদের ছেলেদের জয়েন করি। আমরা টেবিলটিকে নিজের সাথে জয়িন করব, তাই আমাদের এটির নাম পরিবর্তন করতে হবে:

sqlLEFT JOIN users as sons

এখন আমরা মূল টেবিল এবং নাম পরিবর্তন করা টেবিলের মধ্যে সম্পর্ক নির্দেশ করতে পারি:

sqlLEFT JOIN users as sons ON sons.id=users.son_id

এখন ফিল্ডগুলি নির্দেশ করি:

sqlSELECT
  users.name as user_name, sons.name as son_name

এখন সব একত্রিত করি এবং নিম্নলিখিত কোয়েরি পাই:

sqlSELECT
  users.name as user_name, sons.name as son_name
FROM
  users
LEFT JOIN users as sons ON sons.id=users.son_id

ব্যবহারিক কাজ

Задание 1

ধরুন আমাদের কাছে বিভাগ রয়েছে। প্রতিটি বিভাগ একটি মূল বিভাগের অন্তর্ভুক্ত হতে পারে, সেটি আবার তার নিজের মূল বিভাগের অন্তর্ভুক্ত হতে পারে এবং এভাবে চলতে থাকে। সংরক্ষণের গঠনটি লিখে দিন।

Задание 2

এমন একটি কোয়েরি লিখুন যা বিভাগটিকে তার মূল বিভাগসহ বের করে আনবে।

Задание 3

এমন একটি কোয়েরি লিখুন যা বিভাগটিকে তার মূল বিভাগ এবং মূল বিভাগের মূল বিভাগসহ বের করে আনবে।

Задание 4

এমন একটি কোয়েরি লিখুন যা বিভাগটিকে তার মূল বিভাগ, মূল বিভাগের মূল বিভাগ এবং মূল বিভাগের মূল বিভাগের মূল বিভাগসহ বের করে আনবে।