PHP-তে সম্পর্কিত টেবিল থেকে ডেটা পাওয়া
আসুন একটি কুয়েরি করি যা সকল
ব্যবহারকারীকে তাদের শহরসহ নিয়ে আসবে। এর জন্য
আমাদের LEFT
JOIN কমান্ডের প্রয়োজন হবে:
এর সিনট্যাক্স নিম্নরূপ:
SELECT fields FROM table_name
LEFT JOIN related_table_name ON connection_condition
WHERE selection_condition
আসুন এই কমান্ডের সিনট্যাক্সের পৃথক অংশগুলি বুঝে নেওয়া যাক।
ফিল্ডসমূহ
যেহেতু একাধিক টেবিল থেকে নির্বাচন করা হচ্ছে,
সেহেতু * এর মাধ্যমে সকল ফিল্ড নির্বাচন
কাজ করবে না। নিম্নলিখিত কুয়েরিটি শুধুমাত্র প্রধান
টেবিল থেকে ফিল্ড নির্বাচন করবে, কিন্তু সম্পর্কিত টেবিল থেকে নয়:
SELECT *
সমস্ত টেবিল থেকে ডেটা নির্বাচন করার জন্য,
* এর আগে নির্বাচনের টেবিলের নাম
উল্লেখ করতে হবে:
SELECT users.*, cities.*
অথবা আমাদের প্রয়োজনীয় ফিল্ডগুলিকে তাদের আগে টেবিলের নাম উল্লেখ করে তালিকাভুক্ত করা যেতে পারে:
SELECT users.name, cities.name
এই দুটি পদ্ধতির একটি সমস্যা আছে। বিষয়টি হলো, যদি টেবিলগুলিতে ফিল্ডগুলির নাম একই হয়, তাহলে PHP অ্যারেতে নামের সংঘাত হবে এবং শুধুমাত্র একটি ফিল্ড জয়ী হবে, এবং দ্বিতীয়টি থাকবে না।
সমস্যার সমাধানের জন্য, সংঘাতপূর্ণ নামগুলিকে
as কমান্ডের মাধ্যমে পুনঃনামকরণ করতে হবে:
SELECT users.name, cities.name as city_name
সম্পর্ক
ON কমান্ডের পরে আমাদের অবশ্যই
উভয় টেবিলের সেই ফিল্ডগুলি উল্লেখ করতে হবে যার মাধ্যমে
সম্পর্ক স্থাপন করা হয়। আমাদের ক্ষেত্রে এটি হবে id
ফিল্ডটি শহরগুলির টেবিল থেকে এবং city_id
ফিল্ডটি ব্যবহারকারীদের টেবিল থেকে:
ON cities.id=users.city_id
কুয়েরি
শেষ পর্যন্ত, যে কুয়েরিটি ব্যবহারকারীদের তাদের শহরসহ নিয়ে আসবে তা নিম্নরূপ দেখাবে:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
ব্যবহারিক সমস্যা
ধরুন আপনার কাছে পণ্যের একটি টেবিল এবং তাদের বিভাগের একটি টেবিল আছে। একটি কুয়েরি লিখুন যা পণ্যের নামগুলি তাদের বিভাগসহ নিয়ে আসবে।