Cabaran:
Memilih rekod terbaharu untuk setiap pengguna dengan cekap dalam jadual pangkalan data yang mengandungi cap masa dan bendera status ("masuk" atau "keluar") boleh menjadi rumit, terutamanya apabila pengguna mempunyai berbilang entri yang berkongsi cap masa terkini yang sama.
Pendekatan:
Masalah ini diselesaikan menggunakan dua pertanyaan SQL yang berbeza:
1. Pertanyaan untuk Berbilang Rekod Padanan:
Pertanyaan ini mengenal pasti semua rekod dengan cap masa maksimum untuk setiap pengguna.
<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>
Output:
ID | USER | TIME | IO |
---|---|---|---|
2 | 9 | 1370931664 | out |
3 | 6 | 1370932128 | out |
5 | 12 | 1370933037 | in |
2. Pertanyaan untuk Rekod Padanan Tunggal:
Pertanyaan ini hanya mengembalikan satu rekod terbaharu bagi setiap pengguna, mengutamakan ID tertinggi dalam kes hubungan cap masa.
<code class="language-sql">SELECT t1.* FROM lms_attendance t1 WHERE t1.id = (SELECT t2.id FROM lms_attendance t2 WHERE t2.user = t1.user ORDER BY t2.time DESC, t2.id DESC LIMIT 1);</code>
Output:
ID | USER | TIME | IO |
---|---|---|---|
2 | 9 | 1370931664 | out |
3 | 6 | 1370932128 | out |
5 | 12 | 1370933037 | in |
Penjelasan:
MAX(time)
) untuk setiap pengguna dan kemudian mendapatkan semula semua entri yang sepadan dengan cap masa itu. Ini mengendalikan situasi dengan berbilang rekod yang mempunyai cap masa terkini yang sama.ORDER BY time DESC, id DESC
untuk mengutamakan cap masa terkini dan kemudian ID tertinggi, memastikan satu rekod terbaharu yang muktamad dipilih menggunakan LIMIT 1
.Memilih antara pertanyaan ini bergantung pada sama ada anda memerlukan semua rekod dengan cap masa terkini atau hanya satu rekod terbaharu bagi setiap pengguna. Pertanyaan kedua menawarkan penyelesaian yang lebih ringkas apabila hanya satu rekod diperlukan.
Atas ialah kandungan terperinci Bagaimana untuk Memilih Baris Terkini bagi setiap Pengguna dalam Pangkalan Data dengan Cap Masa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!