PHP-তে সম্পর্কিত টেবিল থেকে ডেটা পাওয়া

আসুন একটি কুয়েরি করি যা সকল ব্যবহারকারীকে তাদের শহরসহ নিয়ে আসবে। এর জন্য আমাদের LEFT JOIN কমান্ডের প্রয়োজন হবে:

এর সিনট্যাক্স নিম্নরূপ:

sqlSELECT fields FROM table_name
  LEFT JOIN related_table_name ON connection_condition 
WHERE selection_condition

আসুন এই কমান্ডের সিনট্যাক্সের পৃথক অংশগুলি বুঝে নেওয়া যাক।

ফিল্ডসমূহ

যেহেতু একাধিক টেবিল থেকে নির্বাচন করা হচ্ছে, সেহেতু * এর মাধ্যমে সকল ফিল্ড নির্বাচন কাজ করবে না। নিম্নলিখিত কুয়েরিটি শুধুমাত্র প্রধান টেবিল থেকে ফিল্ড নির্বাচন করবে, কিন্তু সম্পর্কিত টেবিল থেকে নয়:

sqlSELECT *

সমস্ত টেবিল থেকে ডেটা নির্বাচন করার জন্য, * এর আগে নির্বাচনের টেবিলের নাম উল্লেখ করতে হবে:

sqlSELECT users.*, cities.*

অথবা আমাদের প্রয়োজনীয় ফিল্ডগুলিকে তাদের আগে টেবিলের নাম উল্লেখ করে তালিকাভুক্ত করা যেতে পারে:

sqlSELECT users.name, cities.name

এই দুটি পদ্ধতির একটি সমস্যা আছে। বিষয়টি হলো, যদি টেবিলগুলিতে ফিল্ডগুলির নাম একই হয়, তাহলে PHP অ্যারেতে নামের সংঘাত হবে এবং শুধুমাত্র একটি ফিল্ড জয়ী হবে, এবং দ্বিতীয়টি থাকবে না।

সমস্যার সমাধানের জন্য, সংঘাতপূর্ণ নামগুলিকে as কমান্ডের মাধ্যমে পুনঃনামকরণ করতে হবে:

sqlSELECT users.name, cities.name as city_name

সম্পর্ক

ON কমান্ডের পরে আমাদের অবশ্যই উভয় টেবিলের সেই ফিল্ডগুলি উল্লেখ করতে হবে যার মাধ্যমে সম্পর্ক স্থাপন করা হয়। আমাদের ক্ষেত্রে এটি হবে id ফিল্ডটি শহরগুলির টেবিল থেকে এবং city_id ফিল্ডটি ব্যবহারকারীদের টেবিল থেকে:

sqlON cities.id=users.city_id

কুয়েরি

শেষ পর্যন্ত, যে কুয়েরিটি ব্যবহারকারীদের তাদের শহরসহ নিয়ে আসবে তা নিম্নরূপ দেখাবে:

sqlSELECT 
  users.name, cities.name as city_name
FROM 
  users
LEFT JOIN cities ON cities.id=users.city_id

ব্যবহারিক সমস্যা

Задание 1

ধরুন আপনার কাছে পণ্যের একটি টেবিল এবং তাদের বিভাগের একটি টেবিল আছে। একটি কুয়েরি লিখুন যা পণ্যের নামগুলি তাদের বিভাগসহ নিয়ে আসবে।