Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan Masa Daftar Masuk/Keluar Terkini untuk Setiap Pengguna dalam Pangkalan Data?
Pernyataan Masalah:
Tugasnya ialah untuk mencipta paparan pangkalan data yang memaparkan masa daftar masuk/daftar keluar terkini setiap pengguna, termasuk status "masuk" atau "keluar" yang sepadan daripada jadual lms_attendance
.
Pendekatan Awal dan Hadnya:
Percubaan awal digunakan GROUP BY
pada kedua-dua pengguna dan status "masuk/keluar" (io
lajur). Pendekatan ini gagal mengendalikan senario di mana pengguna mempunyai berbilang rekod dengan cap masa maksimum yang sama, menyebabkan entri pendua untuk pengguna tersebut. Pertanyaan yang cacat ialah:
<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>
Penyelesaian Berkesan:
Dua penyelesaian dibentangkan untuk menangani isu ini:
Penyelesaian 1: Mengendalikan Berbilang Masa Maksimum:
Pertanyaan ini mengembalikan semua baris yang mewakili cap masa terkini untuk setiap pengguna, walaupun berbilang rekod berkongsi masa maksimum yang sama:
<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>
Penyelesaian 2: Menjamin Satu Baris bagi setiap Pengguna:
Jika hanya satu rekod bagi setiap pengguna diperlukan, tanpa mengira kemungkinan masa maksimum pendua, pertanyaan ini adalah lebih baik. Ia memilih rekod dengan ID tertinggi (dengan andaian id
kenaikan automatik, mencerminkan entri terbaharu):
<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>
Pertanyaan yang disemak ini menggunakan ORDER BY t2.time DESC, t2.id DESC
untuk mengutamakan masa terkini dan kemudian ID tertinggi sekiranya berlaku pertalian, memastikan hasil tunggal yang muktamad bagi setiap pengguna.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Masa Daftar Masuk/Keluar Terkini untuk Setiap Pengguna dalam Pangkalan Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!