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

สุ่มเลือกแถวข้อมูลจากตาราง MySQL ด้วย ORDER BY RAND()

เพื่อสุ่มเลือกแถวข้อมูล (random row) จากตาราง MySQL สามารถใช้ฟังก์ชัน RAND() ร่วมกับ ORDER BY และ LIMIT 1

ตัวอย่างการสร้างตาราง

mysql> create table DemoTable ( 
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    ClientName varchar(100), 
    ClientAge int ); 
Query OK, 0 rows affected (0.92 sec)

เพิ่มข้อมูลตัวอย่าง

mysql> insert into DemoTable(ClientName,ClientAge) values('Robert',45); 
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(ClientName,ClientAge) values('Mike',55); 
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(ClientName,ClientAge) values('Bob',42); 
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable(ClientName,ClientAge) values('Sam',47); 
Query OK, 1 row affected (0.11 sec)

แสดงข้อมูลทั้งหมด

mysql> select * from DemoTable;
+----+------------+-----------+
| Id | ClientName | ClientAge |
+----+------------+-----------+
| 1  | Robert     | 45        |
| 2  | Mike       | 55        |
| 3  | Bob        | 42        |
| 4  | Sam        | 47        |
+----+------------+-----------+
4 rows in set (0.00 sec)

คำสั่งสุ่มเลือก 1 แถว

mysql> select * from DemoTable order by rand() limit 1;

ผลลัพธ์ตัวอย่าง (จะเปลี่ยนไปทุกครั้งที่รัน)

+----+------------+-----------+
| Id | ClientName | ClientAge |
+----+------------+-----------+
| 3  | Bob        | 42        |
+----+------------+-----------+
1 row in set (0.00 sec)

คำเตือนประสิทธิภาพ: ORDER BY RAND() อาจช้าสำหรับตารางขนาดใหญ่ เพราะต้องสร้างค่าสุ่มสำหรับทุกแถว สำหรับตารางใหญ่ แนะนำวิธีอื่น เช่น สุ่มค่า Primary Key ก่อน แล้วค่อย SELECT WHERE Id = ค่าที่สุ่มได้