Anda tidak dapat menggunakan kolom dengan nilai RAND() dalam klausa ORDER BY karena ORDER BY akan menghitung ulang kolom tersebut beberapa kali. Namun, di MySQL3.23, Anda dapat melakukan: SELECT * FROM table_name ORDER BY RAND(), yang berguna untuk mendapatkan SELECT * FROM table1,table2 WHERE a=b AND c untuk mencapai keacakan Pernyataan untuk menyelesaikan tugas:
PILIH * DARI nama_tabel DIPESAN OLEH rand() BATAS 5;
Rand mengatakan ini di manual ::
RAND()
RAN(N)
Mengembalikan nilai floating point acak dalam rentang 0 hingga 1,0. Jika parameter bilangan bulat N ditentukan, itu digunakan sebagai nilai benih.
mysql> pilih RAND();
-> 0,5925
mysql> pilih RAND(20);
-> 0,1811
mysql> pilih RAND(20);
-> 0,1811
mysql> pilih RAND();
-> 0,2079
mysql> pilih RAND();
-> 0,7888
Anda tidak dapat menggunakan kolom dengan nilai RAND() dalam klausa ORDER BY karena ORDER BY akan menghitung ulang kolom tersebut beberapa kali. Namun, di MySQL3.23, Anda dapat melakukan: SELECT * FROM table_name ORDER BY RAND(), yang berguna untuk mendapatkan SELECT * FROM table1,table2 WHERE a=b AND c
Perhatikan bahwa RAND() dalam klausa WHERE akan dievaluasi ulang setiap kali WHERE dijalankan.
Tapi saya mencobanya. Untuk tabel dengan 8.000 catatan, dibutuhkan 0,08 detik untuk mengeksekusi satu kali, yang agak lambat. Kemudian saya berkonsultasi dengan Google dan mendapatkan kode berikut:
SELECT * FROM table_name AS r1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM table_name)) AS id) AS r2 WHERE r1.id >= r2.id ORDER BY r1.id ASC LIMIT 5;
Efisiensi eksekusi memerlukan 0,02 detik. Sayangnya, hanya mysql 4.1.* dan yang lebih baru yang mendukung subkueri tersebut.