Masalah:
Jadual MySQL menyimpan respons kepada pelbagai RPC panggilan dengan medan untuk cap masa, kaedah, ID dan respons. Matlamatnya ialah untuk mendapatkan semula respons terbaharu untuk semua gabungan kaedah dan ID.
Andaian:
Penyelesaian:
Pertanyaan berikut boleh digunakan untuk mendapatkan hasil yang diingini dengan cekap dengan menggunakan pembolehubah MySQL untuk mengelakkan a JOIN:
SELECT * FROM ( SELECT *, if(@last_method=method,0,1) as new_method_group, @last_method:=method FROM rpc_responses ORDER BY method, timestamp DESC ) as t1 WHERE new_method_group=1;
Pertanyaan ini mula-mula memberikan nilai new_method_group pada setiap baris, yang menunjukkan permulaan kumpulan kaedah baharu. Ia kemudian menapis keputusan untuk memasukkan hanya baris dengan nilai new_method_group 1, memastikan bahawa hanya baris terbaharu untuk setiap kaedah disertakan dalam hasil akhir.
Penyelesaian Alternatif untuk PostgreSQL:
PostgreSQL menyediakan ciri terbina dalam untuk tugasan ini:
SELECT DISTINCT ON (method) timestamp, method, id, response FROM rpc_responses WHERE 1 # some where clause here ORDER BY method, timestamp DESC
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Rekod Terkini dengan Cekap untuk Setiap Kaedah dan ID dalam MySQL dan PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!