Rumah > Soal Jawab > teks badan
Saya mempunyai pertanyaan MySQL yang mengeluarkan baris dalam susunan rawak.
Setiap baris mempunyai name
列,有时查询可能会产生重复的行(name
baris dengan nilai yang sama) - ini mengikut reka bentuk. < /p>
Walau bagaimanapun, kadangkala pertanyaan mengumpulkan baris pendua secara tidak sengaja bersama-sama dalam output.
Saya cuba mencari cara untuk mengagihkan baris yang sama rata dengan nama pendua dalam output supaya baris pendua tidak terkumpul secara tidak sengaja.
P粉3114235942023-09-14 09:16:23
Salah satu cara untuk mencapai ini ialah mengubah suai pertanyaan MySQL untuk memasukkan kriteria pengisihan tambahan untuk memastikan baris dengan nama yang sama diagihkan secara sama rata ke seluruh output.
Berikut ialah contoh pertanyaan untuk mencapai ini:
SELECT * FROM my_table ORDER BY name, RAND();
Pertanyaan ini mula-mula mengisih baris mengikut nama dan kemudian dengan nilai rawak yang dijana oleh fungsi RAND(). Nilai rawak memastikan bahawa baris dengan nama yang sama diedarkan secara rawak ke seluruh output, bukannya dikumpulkan bersama.
Sila ambil perhatian bahawa menggunakan fungsi RAND() dalam klausa ORDER BY boleh menjadi mahal dari segi pengiraan dan mungkin tidak berskala baik dengan jadual besar. Jika ini berlaku, anda mungkin mempertimbangkan untuk menggunakan fungsi deterministik yang berbeza (seperti cincangan MD5 nama) untuk mencapai hasil yang serupa.
SELECT * FROM my_table ORDER BY MD5(name), RAND();
Pertanyaan ini mula-mula mengisih baris mengikut cincangan MD5 nama dan kemudian dengan nilai rawak yang dijana oleh fungsi RAND(). Cincang MD5 memastikan bahawa baris dengan nama yang sama diagihkan sama rata ke seluruh output, manakala nilai rawak memastikan susunan baris adalah rawak.