วัตถุประสงค์
ต้องการให้ชื่อเฉพาะ (เช่น 'Robert') อยู่แถวแรกเสมอ ส่วนรายชื่ออื่นๆ เรียงแบบสุ่ม และดึงมาเพียงจำนวนที่กำหนด (LIMIT)
สร้างตารางและข้อมูลทดสอบ
mysql> CREATE TABLE DemoTable1426 (
FirstName VARCHAR(20)
);
mysql> INSERT INTO DemoTable1426 VALUES ('John');
mysql> INSERT INTO DemoTable1426 VALUES ('Adam');
mysql> INSERT INTO DemoTable1426 VALUES ('Robert');
mysql> INSERT INTO DemoTable1426 VALUES ('David');
mysql> INSERT INTO DemoTable1426 VALUES ('Sam');
ดูข้อมูลทั้งหมด
mysql> SELECT * FROM DemoTable1426;
ผลลัพธ์:
+-----------+
| FirstName |
+-----------+
| John |
| Adam |
| Robert |
| David |
| Sam |
+-----------+
คำสั่ง Query หลัก
mysql> SELECT * FROM DemoTable1426
-> ORDER BY (FirstName = 'Robert') DESC, RAND()
-> LIMIT 3;
คำอธิบาย
(FirstName = 'Robert')จะคืนค่า1(TRUE) สำหรับแถวที่ชื่อ Robert, และ0(FALSE) สำหรับอื่นๆDESCทำให้ค่า 1 (Robert) อยู่ด้านบนสุดRAND()เรียงแถวที่เหลือแบบสุ่มLIMIT 3จำกัดผลลัพธ์ 3 แถว
ผลลัพธ์ตัวอย่าง
+-----------+
| FirstName |
+-----------+
| Robert |
| Adam |
| David |
+-----------+
หมายเหตุ: ผลลัพธ์แถวที่ 2-3 จะเปลี่ยนไปทุกครั้งที่รันคิวรี เนื่องจาก RAND()
กรณีขยาย: ล็อคหลายชื่อพร้อมกัน
SELECT * FROM DemoTable1426
ORDER BY (FirstName IN ('Robert', 'Adam')) DESC, RAND()
LIMIT 3;
จะทำให้ Robert และ Adam อยู่ข้างบน (เรียงตามลำดับใน IN) ส่วนที่เหลือสุ่ม