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

สุ่มข้อมูลใน MySQL แล้วเรียงลำดับตามคอลัมน์เฉพาะ

เมื่อต้องการสุ่มข้อมูล (Random Rows) แล้วจึงเรียงลำดับผลลัพธ์สุ่มนั้นตามคอลัมน์เฉพาะ ให้ใช้ Subquery: สุ่มก่อนด้วย ORDER BY RAND() แล้วค่อยเรียงนอกสุด

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

สร้างตารางคะแนน:

mysql> create table DemoTable1339 (Name varchar(30), Score int);
mysql> insert into DemoTable1339 values('Chris',56),('Bob',46),('Adam',78),('John',90),('Carol',98);

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

+-------+-------+
| Name  | Score |
+-------+-------+
| Chris | 56    |
| Bob   | 46    |
| Adam  | 78    |
| John  | 90    |
| Carol | 98    |
+-------+-------+

คำสั่งสุ่ม 4 แถว แล้วเรียงตาม Name

mysql> select * from (select * from DemoTable1339 order by rand() limit 4) tbl order by Name;

ผลลัพธ์ (ตัวอย่าง - จะสุ่มต่างกันทุกครั้ง)

+-------+-------+
| Name  | Score |
+-------+-------+
| Adam  | 78    |
| Bob   | 46    |
| Carol | 98    |
| Chris | 56    |
+-------+-------+

คำอธิบาย:

  • Subquery ภายใน: SELECT * FROM DemoTable1339 ORDER BY RAND() LIMIT 4 สุ่ม 4 แถว
  • Query ภายนอก: SELECT * FROM (...) tbl ORDER BY Name เรียงผลลัพธ์สุ่มตามชื่อ
  • ต้องตั้ง alias ให้ subquery (ที่นี่คือ tbl)
  • ประสิทธิภาพ: ORDER BY RAND() ช้าเมื่อตารางใหญ่ (Full table scan) สำหรับตารางใหญ่ควรใช้วิธีอื่น เช่นสุ่ม Primary Key แล้ว JOIN