Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Memilih Subset Rawak dan Kemudian Susun oleh Lajur Lain dalam MySQL?

Bagaimana untuk Memilih Subset Rawak dan Kemudian Susun oleh Lajur Lain dalam MySQL?

Linda Hamilton
Linda Hamiltonasal
2024-10-26 06:04:31680semak imbas

 How to Select a Random Subset and Then Order by Another Column in 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn