Cara Mendapatkan Mesej Terkini daripada Setiap Kumpulan Pengguna Menggunakan GROUP BY
Dalam pangkalan data anda, anda mempunyai jadual bernama "message" yang mengandungi berikut lajur:
Matlamat anda adalah untuk mengeluarkan mesej terkini daripada setiap satu kumpulan pengguna. Sebagai contoh, ini adalah serupa dengan senarai mesej yang anda lihat dalam peti masuk Facebook anda sebelum mengklik pada perbualan tertentu.
Pada mulanya, anda cuba menggunakan pertanyaan berikut, yang mengumpulkan mesej mengikut lajur from_id:
SELECT * FROM messages GROUP BY from_id
Walau bagaimanapun, anda perasan bahawa pertanyaan ini mengembalikan mesej yang paling lama dan bukannya yang terkini.
Untuk mengatasi had ini, anda perlu menentukan nilai cap masa terkini untuk setiap kumpulan mesej menggunakan subquery. Kemudian, sertai subkueri ini dengan jadual "mesej" utama untuk menapis hanya mesej terkini:
SELECT t1.* FROM messages t1 JOIN ( SELECT from_id, MAX(timestamp) timestamp FROM messages GROUP BY from_id ) t2 ON t1.from_id = t2.from_id AND t1.timestamp = t2.timestamp;
Pertanyaan yang diubah suai ini mengenal pasti rekod terkini dalam setiap kumpulan dengan berkesan, memberikan anda hasil yang diingini.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Mesej Terkini daripada Setiap Kumpulan Pengguna dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!