Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memilih Transaksi Terkini dengan Cekap untuk Setiap Penjual Menggunakan Laravel Eloquent?

Bagaimana untuk Memilih Transaksi Terkini dengan Cekap untuk Setiap Penjual Menggunakan Laravel Eloquent?

Linda Hamilton
Linda Hamiltonasal
2024-12-01 20:36:11329semak imbas

How to Efficiently Select the Latest Transaction for Each Seller Using Laravel Eloquent?

Laravel Fasih: Memilih Semua Baris Terkini untuk Setiap penjual_id

Pertimbangkan jadual yang mengandungi transaksi rekod:

  • id
  • penjual_id
  • jumlah
  • dicipta_pada

Objektifnya adalah untuk mendapatkan semula transaksi terkini untuk setiap seller_id unik. Walaupun mudah untuk mendapatkan transaksi terbaharu untuk penjual tertentu, cabarannya terletak pada mengekstrak rekod terkini untuk semua penjual.

Pendekatan Pertanyaan Pangkalan Data:

Satu yang cekap kaedahnya ialah menggunakan pertanyaan SQL:

select s.*
from snapshot s
left join snapshot s1 on s.seller_id = s1.seller_id
and s.created_at < s1.created_at
where s1.seller_id is null

Pertanyaan ini mengenal pasti transaksi terkini untuk setiap id_penjual dengan menggunakan penyertaan sendiri dan mengecualikan rekod dengan yang dibuat kemudian pada masanya.

Pendekatan Pembina Pertanyaan Laravel:

Untuk mencapai hasil yang sama menggunakan Pembina Pertanyaan Laravel :

DB::table('snapshot as s')
->select('s.*')
->leftJoin('snapshot as s1', function ($join) {
    $join->on('s.seller_id', '=', 's1.seller_id')
    ->whereRaw('s.created_at < s1.created_at');
})
->whereNull('s1.seller_id')
->get();

Kod ini menggunakan teknik sambung sendiri yang serupa seperti SQL pertanyaan, mengembalikan transaksi terkini untuk setiap seller_id.

Atas ialah kandungan terperinci Bagaimana untuk Memilih Transaksi Terkini dengan Cekap untuk Setiap Penjual Menggunakan Laravel Eloquent?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn