Tugas pangkalan data yang kerap melibatkan pemilihan entri terbaharu untuk setiap pengguna unik. Pertimbangkan jadual lms_attendance
, yang menjejaki masa daftar masuk dan daftar keluar pengguna.
Struktur jadual lms_attendance
ialah:
id | user | time | io |
---|---|---|---|
1 | 9 | 1370931202 | out |
2 | 9 | 1370931664 | out |
3 | 6 | 1370932128 | out |
4 | 12 | 1370932128 | out |
5 | 12 | 1370933037 | in |
Matlamat kami adalah untuk menjana pertanyaan yang hanya mengembalikan rekod terkini untuk setiap pengguna, dengan tepat menggambarkan status io
semasa mereka (masuk atau keluar).
Pendekatan naif mungkin:
<code class="language-sql">select `lms_attendance`.`id` AS `id`, `lms_attendance`.`user` AS `user`, max(`lms_attendance`.`time`) AS `time`, `lms_attendance`.`io` AS `io` from `lms_attendance` group by `lms_attendance`.`user`, `lms_attendance`.`io`</code>
Ini, bagaimanapun, menghasilkan keputusan yang salah:
id | user | time | io |
---|---|---|---|
3 | 6 | 1370932128 | out |
1 | 9 | 1370931664 | out |
5 | 12 | 1370933037 | in |
4 | 12 | 1370932128 | out |
time
adalah betul, tetapi status io
tidak selalu dikaitkan dengan cap waktu terbaharu.
Penyelesaian terletak pada menggunakan subkueri untuk mengenal pasti time
maksimum untuk setiap pengguna. Pertanyaan yang dipertingkatkan ialah:
<code class="language-sql">SELECT t1.* FROM lms_attendance t1 WHERE t1.time = (SELECT MAX(t2.time) FROM lms_attendance t2 WHERE t2.user = t1.user)</code>
Pertanyaan ini menggabungkan jadual dengan cekap dengan subkueri yang mencari time
maksimum untuk setiap pengguna. Hanya rekod yang sepadan dengan cap masa terkini dipilih, memastikan status io
tepat untuk setiap entri terkini pengguna.
Subkueri ialah alat yang berkuasa untuk mendapatkan semula data yang kompleks. Contoh ini menunjukkan keberkesanannya dalam memilih rekod terkini bagi setiap pengguna unik dengan cekap, teknik yang berharga untuk analisis dan pelaporan data.
Atas ialah kandungan terperinci Bagaimana untuk Memilih Rekod Terkini dengan Cekap untuk Setiap Pengguna dalam Pangkalan Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!