Masalah:
Bayangkan mempunyai jadual dengan lajur seperti 'id,' 'kandungan' dan 'berat.' Anda ingin memilih baris secara rawak daripada jadual ini, dengan mengambil kira nilai 'berat'. Sebagai contoh, jika tiga baris wujud:
id | content | weight |
---|---|---|
1 | some content | 60 |
2 | other content | 40 |
3 | something | 100 |
Barisan pertama mempunyai 30% peluang untuk dipilih, baris kedua mempunyai peluang 20% dan baris ketiga mempunyai peluang 50%.
Penyelesaian:
Satu pendekatan ialah menggunakan takungan berwajaran persampelan:
SELECT id, -LOG(RAND()) / weight AS priority FROM your_table ORDER BY priority LIMIT 1;
Kaedah ini membolehkan anda memilih satu daripada banyak elemen dengan kebarangkalian berkadar dengan beratnya. Ia berfungsi dengan berkesan untuk memilih satu elemen.
Teknik ini dihuraikan dalam artikel ini: [Pensampelan Takungan Berwajaran](https://bit.ly/weighted-res-sampling). Ambil perhatian bahawa artikel memilih nilai terbesar POW(RAND(), 1/weight), yang bersamaan dengan memilih nilai terkecil -LOG(RAND()) / weight.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memilih Baris Secara Rawak daripada Jadual dengan Kebarangkalian Berwajaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!