Rumah > Artikel > pangkalan data > Bagaimana untuk mencari baris data terkini yang memenuhi syarat dalam MySql
Ini ialah helaian rekod yang merekodkan lawatan orang ramai.
Data dalam jadual data merekodkan dengan tepat warna topi, masa dan kod orang (unik untuk setiap orang) yang dipakai setiap orang semasa melawat.
Keluarkan data terkini yang memenuhi syarat-syarat Lawatan rekod.
Apakah yang akan anda lakukan yang terbaik?
Pertama sekali, keluarkan rekod lawatan terkini kod orang A101.
Mula-mula tunjukkan contoh sql yang salah: menggunakan fungsi max() untuk diberikan.
PILIH MAX(id) SEBAGAI id ,user_code,cap_color,create_time FROM vist_record WHERE user_code='A101' ;
Hasil pertanyaan (hasil yang salah) :
Jelas sekali data itu betul pada pandangan pertama, tetapi ia sebenarnya salah.
Boleh terangkan serba sedikit kenapa salah, memandangkan ada yang berminat dengan ruangan komen (saudara-saudara dialu-alukan untuk menyatakan pendapat sendiri).
Untuk menerangkan secara ringkas, max ialah fungsi agregat kami tidak digunakan dengan kumpulan oleh Malah, hanya mysql yang boleh membenarkan kami melaksanakannya pada masa ini, dan banyak pangkalan data melaporkan ralat secara langsung.
Kemudian pelaksanaan dilaksanakan Sebenarnya, pada masa ini, MySQL adalah setara dengan merawat keseluruhan jadual sebagai blok kandungan untuk melakukan pengambilan semula termampat.
Kami menambahkan keadaan dimana user_code='A101', jadi keseluruhan blok kandungan menapis data lain yang bukan user_code='A101'.
Dalam erti kata lain, di bawah pelaksanaan longgar seperti ini, mysql menjamin bahawa max mengembalikan nilai maksimum (lajur yang berkaitan), tetapi ia tidak dijamin untuk medan lajur lain.
Data yang betul ialah:
Adakah itu bermakna max(id) tidak boleh digunakan?
Penggunaan yang betul (gunakan nilai id maksimum yang memenuhi syarat sebagai syarat):
PILIH
id,kod_pengguna,cap_color,create_time
DARI vist_record
WHERE id IN (SELECT MAX(id) AS id FROM vist_record WHERE user_code='A101' )
Hasil pertanyaan:
Tetapi lihat penggunaan di atas Dengan kaedah subquery ini,
semua orang mesti diam-diam memarahi saya, adakah sangat menyusahkan untuk mendapatkan data terkini?
Adakah yang lebih mudah?
Ya.
Sebagai contoh, kami telah menentukan bahawa id adalah auto-naik dan data dengan id terbesar (data yang memenuhi syarat) adalah yang terkini.
Kemudian kita boleh menggunakan tertib terbalik DESC untuk mendapatkan data terkini:
DESC ialah tertib terbalik/tertib menurun.
PS:
Gunakan carian terbalik:
PILIH *
DARI vist_record
WHERE user_code='A101'
PESANAN OLEH id DESC
HAD 1;
Hasil pertanyaan:
atau dalam susunan terbalik mengikut masa:
PILIH *
DARI vist_record
WHERE user_code='A101'
ORDER BY create_time DESC
LIMIT 1;
Hasil pertanyaan:
Adakah semudah itu untuk dicapai?
Jadi bagaimana jika yang kita perlukan bukan untuk menentukan A101 tetapi data terkini semua orang yang terlibat?
Iaitu, terdapat beberapa kumpulan konsep.
Data terkini yang memenuhi syarat bagi setiap kategori
Contoh ralat:
Hasil penapis yang salah:
Pengekodan yang betul:
PILIH id ,user_code,cap_color,create_time FROM vist_record WHERE id in
(
PILIH MAX(id) AS id FROM vist_record KUMPULAN OLEH user_code
)
)
Atas ialah kandungan terperinci Bagaimana untuk mencari baris data terkini yang memenuhi syarat dalam MySql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!