Header Ads

Header ADS

Laravel Subquery use

 

Laravel-এ Subquery ব্যবহার করা হয় তখন, যখন একটি কোয়েরির ভিতরে আরেকটি কোয়েরি চালাতে হয়—অর্থাৎ যখন আপনি এমন ডেটা চাইছেন যেটা অন্য কোনো টেবিল বা শর্তের উপর নির্ভরশীল। এটি জটিল রিপোর্টিং, ফিল্টারিং, বা অ্যাগ্রিগেটেড ডেটা বের করার ক্ষেত্রে খুবই উপযোগী।


🔍 কখন Subquery ব্যবহার করবেন?

  1. যখন আপনাকে একটি টেবিল থেকে ডেটা আনতে হবে যা অন্য টেবিলের কোনো শর্তের উপর নির্ভরশীল

  2. যখন আপনাকে aggregate function (যেমন COUNT, MAX, AVG) এর উপর ভিত্তি করে কোন ফিল্ড বের করতে হবে।

  3. যখন আপনি performance optimization করতে চান — অনেক ক্ষেত্রেই subquery main query এর সাথে efficient হয়।


✅ উদাহরণ ১: সর্বশেষ অর্ডার সহ ইউজার তালিকা

ধরুন, আপনার users এবং orders টেবিল আছে। আপনি প্রত্যেক ইউজারের সর্বশেষ অর্ডারের তারিখসহ ইউজার লিস্ট দেখতে চান।


use Illuminate\Support\Facades\DB; $users = DB::table('users') ->select('users.*') ->addSelect([ 'last_order_date' => DB::table('orders') ->select('created_at') ->whereColumn('orders.user_id', 'users.id') ->latest('created_at') ->limit(1) ]) ->get();

📝 এখানে orders টেবিল থেকে প্রতিটি ইউজারের সর্বশেষ created_at কে subquery দিয়ে আনা হয়েছে।


✅ উদাহরণ ২: সবচেয়ে বেশি বিক্রয়কৃত প্রোডাক্ট

ধরি আপনার টেবিলগুলো:

  • products

  • order_items (প্রতিটি অর্ডারের প্রোডাক্ট আইডি ও quantity থাকে)


use Illuminate\Support\Facades\DB; $topProduct = DB::table('products') ->where('id', function ($query) { $query->select('product_id') ->from('order_items') ->selectRaw('product_id, SUM(quantity) as total_sold') ->groupBy('product_id') ->orderByDesc('total_sold') ->limit(1); }) ->first();

✅ উদাহরণ ৩: যেসব ইউজার সর্বোচ্চ অর্ডার করেছে

$users = DB::table('users') ->whereIn('id', function ($query) { $query->select('user_id') ->from('orders') ->groupBy('user_id') ->havingRaw('COUNT(*) > 10'); }) ->get();

✅ Laravel Eloquent দিয়ে Subquery


use App\Models\User; use Illuminate\Database\Eloquent\Builder; $users = User::addSelect([ 'last_order_date' => function (Builder $query) { $query->select('created_at') ->from('orders') ->whereColumn('orders.user_id', 'users.id') ->latest() ->limit(1); } ])->get();

🔗 কোথায় কাজে লাগবে (Complex Project Ideas):

  1. ই-কমার্স সাইটে:

    • ইউজারের সর্বশেষ অর্ডার স্ট্যাটাস

    • প্রোডাক্টের সর্বোচ্চ রিভিউ দেওয়া ইউজার

    • একটি প্রোডাক্ট কতোবার কার্টে যোগ করা হয়েছে

  2. HR Management System:

    • একজন কর্মচারীর সর্বশেষ অ্যাটেনডেন্স ডেট

    • যেসব ডিপার্টমেন্টে ১০ জনের বেশি কর্মচারী আছে

  3. School Management:

    • প্রতিটি ছাত্রের সর্বোচ্চ মার্ক পাওয়া বিষয়

    • প্রতি ক্লাসের টপ ৩ স্টুডেন্ট

No comments

Theme images by fpm. Powered by Blogger.