เมื่อต้องการสุ่มข้อมูล (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