Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

จัดเรียงแบบสุ่มและเลือกแถวสุ่มใน MySQL ด้วย ORDER BY RAND()

ใช้ 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 ในโปรแกรมก่อน