Bagaimana untuk Memilih Secara Rawak dan kemudian Isih Data dalam Pertanyaan MySQL?

DDD
Lepaskan: 2024-10-26 05:12:31
asal
692 orang telah melayarinya

How to Randomly Select and then Sort Data in MySQL Queries?

Menggabungkan Susunan Rawak dan Menaik dalam Pertanyaan MySQL

Dalam senario pangkalan data di mana anda mempunyai bilangan pengguna yang ramai, anda mungkin menghadapi situasi di mana anda ingin memilih subset daripadanya secara rawak dan seterusnya menyusunnya mengikut atribut tertentu, seperti nama. Walaupun ini mungkin kelihatan seperti tugas yang mudah, pertanyaan SQL standard mungkin tidak selalu memberikan hasil yang diingini.

Satu pendekatan yang mungkin anda pertimbangkan ialah menggunakan ORDER BY rand(), yang sering digunakan untuk mendapatkan hasil rawak daripada pangkalan data. Walau bagaimanapun, apabila digabungkan dengan klausa ORDER BY yang lain, seperti nama ASC, ia mungkin tidak berfungsi seperti yang diharapkan. Sebagai contoh, pertanyaan di bawah mungkin tidak menghasilkan hasil yang diingini:

<code class="sql">SELECT * FROM users WHERE 1 ORDER BY rand(), name ASC LIMIT 20</code>
Salin selepas log masuk

Pertanyaan ini cuba memilih 20 pengguna secara rawak dan kemudian memesannya dalam tertib menaik mengikut atribut nama mereka. Walau bagaimanapun, adalah penting untuk memahami bahawa sistem pengurusan pangkalan data (DBMS) memproses pertanyaan dari kiri ke kanan. Oleh itu, dalam kes ini, fungsi rand() digunakan terlebih dahulu, secara berkesan merombak keseluruhan set data. Selepas itu, klausa nama ASC digunakan, tetapi memandangkan data telah pun diacakkan, ia tidak mempunyai kesan yang bermakna pada susunan keputusan.

Penyelesaian Subkueri

Untuk mencapai tingkah laku yang diingini, anda boleh menggunakan subkueri dalam pertanyaan utama. Subkueri ialah pertanyaan bersarang yang boleh digunakan untuk mengasingkan subset data dan menggunakan logik khusus padanya. Dengan memanfaatkan subkueri, anda boleh memilih 20 pengguna secara rawak dahulu dan kemudian memesan mereka mengikut atribut nama mereka dalam subkueri.

Berikut ialah contoh pertanyaan yang disemak yang menggunakan subkueri:

<code class="sql">SELECT * FROM 
(
    SELECT * FROM users ORDER BY rand() LIMIT 20
) T1
ORDER BY name</code>
Salin selepas log masuk

Dalam pertanyaan ini, subquery (SELECT * FROM users ORDER BY rand() LIMIT 20) memilih 20 pengguna daripada jadual pengguna dalam susunan rawak dan menyimpannya dalam jadual sementara T1. Pertanyaan luar kemudian memilih semua lajur daripada T1 dan menyusun keputusan mengikut atribut nama.

Dengan menggunakan subkueri, anda memastikan bahawa fungsi rand() digunakan hanya pada subset pengguna yang anda mahu secara rawak pilih. Pendekatan ini menjamin bahawa susunan nama seterusnya digunakan pada data yang sudah rawak, menghasilkan hasil yang diinginkan bagi 20 pengguna yang dipilih secara rawak yang disusun mengikut abjad nama mereka.

Atas ialah kandungan terperinci Bagaimana untuk Memilih Secara Rawak dan kemudian Isih Data dalam Pertanyaan MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!