คุณไม่สามารถใช้คอลัมน์ที่มีค่า RAND() ในส่วนคำสั่ง ORDER BY ได้ เนื่องจาก ORDER BY จะคำนวณคอลัมน์ใหม่หลายครั้ง อย่างไรก็ตามใน MySQL3.23 คุณสามารถทำได้: SELECT * FROM table_name ORDER BY RAND() ซึ่งมีประโยชน์ในการรับ SELECT * FROM table1,table2 WHERE a=b AND c เพื่อให้เกิดการสุ่ม ฉันพบสิ่งต่อไปนี้จากคู่มือ คำชี้แจงเพื่อให้งานสำเร็จ:
SELECT * จาก table_name เรียงลำดับตาม rand() จำกัด 5;
rand พูดสิ่งนี้ในคู่มือ::
แรนด์()
แรนด์(N)
ส่งกลับค่าจุดลอยตัวแบบสุ่มในช่วง 0 ถึง 1.0 หากระบุพารามิเตอร์จำนวนเต็ม N จะถูกใช้เป็นค่าเริ่มต้น
mysql> เลือก RAND();
-> 0.5925
mysql> เลือก RAND (20);
-> 0.1811
mysql> เลือก RAND (20);
-> 0.1811
mysql> เลือก RAND();
-> 0.2079
mysql> เลือก RAND();
-> 0.7888
คุณไม่สามารถใช้คอลัมน์ที่มีค่า RAND() ในส่วนคำสั่ง ORDER BY ได้ เนื่องจาก ORDER BY จะคำนวณคอลัมน์ใหม่หลายครั้ง อย่างไรก็ตาม ใน MySQL3.23 คุณสามารถทำได้: SELECT * FROM table_name ORDER BY RAND() ซึ่งจะเป็นประโยชน์ในการรับ SELECT * FROM table1,table2 WHERE a=b AND c
โปรดทราบว่า RAND() ในส่วนคำสั่ง WHERE จะได้รับการประเมินใหม่ทุกครั้งที่ดำเนินการ WHERE
แต่ฉันลองแล้ว สำหรับตารางที่มี 8,000 รายการ จะใช้เวลาดำเนินการ 0.08 วินาทีซึ่งช้านิดหน่อย ต่อมาฉันปรึกษา Google และได้รับรหัสต่อไปนี้:
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 เรียงลำดับตาม r1.id ASC LIMIT 5;
ประสิทธิภาพการดำเนินการต้องใช้เวลา 0.02 วินาที ขออภัย มีเพียง mysql 4.1.* และสูงกว่าเท่านั้นที่รองรับแบบสอบถามย่อยดังกล่าว