Apabila bekerja dengan pangkalan data MySQL, selalunya perlu untuk mendapatkan subset data sambil memastikan susunan tertentu. Satu senario biasa ialah memilih sampel rawak rekod, seperti pengguna, dan kemudian menyusun lagi keputusan berdasarkan atribut tertentu, seperti nama.
Percubaan awal untuk mencapai ini adalah untuk menggunakan pertanyaan berikut:
<code class="sql">SELECT * FROM users WHERE 1 ORDER BY rand(), name ASC LIMIT 20</code>
Walau bagaimanapun, pertanyaan ini mungkin tidak memberikan hasil yang dijangkakan kerana fungsi rand() mengisih keseluruhan set data secara rawak, dan pesanan ASC nama berikutnya tidak dijamin.
Untuk mencapai rawak secara berkesan sambil memastikan pengisihan berasaskan nama, pendekatan subkueri disyorkan:
<code class="sql">SELECT * FROM ( SELECT * FROM users ORDER BY rand() LIMIT 20 ) T1 ORDER BY name </code>
Dalam pertanyaan ini, subkueri paling dalam ( SELECT * FROM users ORDER BY rand() LIMIT 20) memilih sampel rawak 20 pengguna. Klausa LIMIT 20 memastikan bahawa hanya 20 baris dikembalikan.
Pertanyaan luar kemudian menggunakan hasil subkueri sebagai inputnya, dilambangkan dengan T1. Ia menggunakan klausa ORDER BY name untuk menyusun keputusan subquery dalam susunan menaik mengikut nama. Ini secara berkesan menggabungkan kerawak pilihan awal dengan pengisihan berasaskan nama yang dikehendaki.
Dengan menggunakan pendekatan subkueri ini, anda boleh mendapatkan semula sampel rawak pengguna dan mengisih mereka mengikut abjad berdasarkan nama mereka, seperti yang dimaksudkan.
Atas ialah kandungan terperinci Bagaimana untuk Menggabungkan Pemilihan Rawak dan Pengisihan Berdasarkan Nama dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!