ใช้ ORDER BY RAND() เพื่อสุ่มลำดับแถว แล้วจำกัดจำนวนด้วย LIMIT
mysql> CREATE TABLE DemoTable1559 (
-> EmployeeId INT,
-> EmployeeName VARCHAR(20),
-> EmployeeAge INT
-> );
Query OK, 0 rows affected (1.22 sec)
mysql> INSERT INTO DemoTable1559 VALUES(101, 'Bob', 28); Query OK, 1 row affected (0.17 sec) mysql> INSERT INTO DemoTable1559 VALUES(102, 'Robert', 26); Query OK, 1 row affected (0.16 sec) mysql> INSERT INTO DemoTable1559 VALUES(103, 'Sam', 25); Query OK, 1 row affected (0.17 sec) mysql> INSERT INTO DemoTable1559 VALUES(104, 'Mike', 29); Query OK, 1 row affected (0.17 sec) mysql> INSERT INTO DemoTable1559 VALUES(105, 'John', 34); Query OK, 1 row affected (0.18 sec) mysql> INSERT INTO DemoTable1559 VALUES(106, 'Carol', 31); Query OK, 1 row affected (0.19 sec)
mysql> SELECT * FROM DemoTable1559;
+------------+--------------+-------------+ | EmployeeId | EmployeeName | EmployeeAge | +------------+--------------+-------------+ | 101 | Bob | 28 | | 102 | Robert | 26 | | 103 | Sam | 25 | | 104 | Mike | 29 | | 105 | John | 34 | | 106 | Carol | 31 | +------------+--------------+-------------+ 6 rows in set (0.00 sec)
สุ่ม 3 แถวจาก ID ที่ระบุ:
mysql> SELECT * FROM DemoTable1559
-> WHERE EmployeeId IN (101, 103, 106)
-> ORDER BY RAND() LIMIT 3;
+------------+--------------+-------------+ | EmployeeId | EmployeeName | EmployeeAge | +------------+--------------+-------------+ | 101 | Bob | 28 | | 103 | Sam | 25 | | 106 | Carol | 31 | +------------+--------------+-------------+ 3 rows in set (0.00 sec)
ประสิทธิภาพ: ORDER BY RAND() ช้าในตารางใหญ่ (Full table scan) สำหรับ Production ใช้วิธีอื่น เช่นสุ่ม ID ในโปรแกรมก่อน