Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memilih Subset Rawak dan Kemudian Susun oleh Lajur Lain dalam MySQL?
Pemilihan dan Susunan Rawak dalam MySQL
Apabila membuat pertanyaan pangkalan data MySQL, adalah perkara biasa untuk memilih subset rekod secara rawak. Klausa ORDER BY RAND() boleh digunakan untuk mencapai ini. Walau bagaimanapun, adalah penting untuk mempertimbangkan susunan operasi apabila menggabungkan klausa ini dengan klausa pesanan lain.
Satu perangkap biasa berlaku apabila cuba memilih subset rawak rekod dan kemudian mengisih set yang terhasil mengikut lajur lain. Pertanyaan berikut ialah contoh ini:
SELECT * FROM users WHERE 1 ORDER BY RAND(), name ASC LIMIT 20
Tujuan pertanyaan ini adalah untuk memilih 20 pengguna rawak daripada jadual pengguna dan kemudian menyusun mereka dalam tertib menaik mengikut lajur nama mereka. Walau bagaimanapun, pertanyaan ini tidak akan menghasilkan hasil yang diingini.
Sebabnya ialah klausa ORDER BY RAND() memperkenalkan susunan bukan deterministik. Ini bermakna susunan keputusan akan berubah setiap kali pertanyaan dilaksanakan. Akibatnya, klausa ASC nama berikutnya tidak boleh digunakan untuk memesan keputusan dengan pasti.
Untuk menyusun keputusan dengan betul, kita perlu menggunakan subkueri. Pertanyaan berikut akan memilih 20 pengguna rawak dan kemudian memesannya mengikut lajur nama mereka:
SELECT * FROM ( SELECT * FROM users ORDER BY RAND() LIMIT 20 ) T1 ORDER BY name
Pertanyaan dalaman memilih 20 pengguna secara rawak dan menyimpan hasilnya dalam jadual sementara T1. Pertanyaan luar kemudian memilih semua baris daripada T1 dan menyusunnya mengikut nama.
Atas ialah kandungan terperinci Bagaimana untuk Memilih Subset Rawak dan Kemudian Susun oleh Lajur Lain dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!