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

วิธีสุ่มเลือกแถวข้อมูลใน MySQL (Random Row)

ใช้ ORDER BY RAND() LIMIT 1 เพื่อสุ่ม 1 แถวจากตาราง

ไวยากรณ์

SELECT * FROM yourTableName ORDER BY RAND() LIMIT 1;

ตัวอย่างการใช้งาน

สร้างตาราง generateRandomRow:

mysql> CREATE TABLE generateRandomRow (
    -> Id INT NOT NULL AUTO_INCREMENT,
    -> Name VARCHAR(20),
    -> Age INT,
    -> PRIMARY KEY(Id)
    -> );

เพิ่มข้อมูล 7 แถว:

mysql> INSERT INTO generateRandomRow(Name, Age) VALUES('John',23),('Larry',21),('David',21),('Carol',24),('Bob',27),('Mike',29),('Sam',26);

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

+----+-------+------+
| Id | Name  | Age  |
+----+-------+------+
| 1  | John  | 23   |
| 2  | Larry | 21   |
| 3  | David | 21   |
| 4  | Carol | 24   |
| 5  | Bob   | 27   |
| 6  | Mike  | 29   |
| 7  | Sam   | 26   |
+----+-------+------+

คำสั่งสุ่ม 1 แถว (รันครั้งแรก)

mysql> SELECT * FROM generateRandomRow ORDER BY RAND() LIMIT 1;
+----+------+------+
| Id | Name | Age  |
+----+------+------+
| 5  | Bob  | 27   |
+----+------+------+

รันอีกครั้ง (ได้แถวต่างกัน)

mysql> SELECT * FROM generateRandomRow ORDER BY RAND() LIMIT 1;
+----+------+------+
| Id | Name | Age  |
+----+------+------+
| 6  | Mike | 29   |
+----+------+------+

⚠️ คำเตือน: ORDER BY RAND() ช้าในตารางใหญ่ (Full Table Scan) สำหรับ Production ให้ใช้วิธีอื่น เช่นสุ่ม Primary Key แล้ว WHERE IN