ใช้ ORDER BY (เงื่อนไข) DESC, RAND() เพื่อ "ปักหมุด" แถวที่ตรงเงื่อนไขไว้หน้าสุด ส่วนอื่นสุ่ม
ตัวอย่างการใช้งาน
สร้างตารางตัวเลข:
mysql> create table DemoTable1921 (Number int);
เพิ่มข้อมูล:
mysql> insert into DemoTable1921 values(40),(80),(820),(10);
ดูข้อมูลทั้งหมด:
mysql> select * from DemoTable1921;
+--------+ | Number | +--------+ | 40 | | 80 | | 820 | | 10 | +--------+ 4 rows in set (0.00 sec)
คิวรี: คงที่ 40 ไว้บนสุด ส่วนอื่นสุ่ม
mysql> select * from DemoTable1921
-> order by (Number=40) desc, rand();
ผลลัพธ์ตัวอย่าง:
+--------+ | Number | +--------+ | 40 | | 820 | | 10 | | 80 | +--------+ 4 rows in set (0.00 sec)
คำอธิบาย
(Number=40)คืนค่า 1 (TRUE) สำหรับแถวที่เป็น 40, 0 (FALSE) สำหรับอื่นๆDESCเรียงจาก 1 ไป 0 → แถวที่เป็น 40 อยู่บนสุดRAND()เรียงสุ่มสำหรับแถวที่เหลือ (ค่า 0 เท่ากัน)- ใช้ได้กับหลายเงื่อนไข:
ORDER BY (col='A') DESC, (col='B') DESC, RAND()
ประโยชน์: แสดงรายการ "แนะนำ" หรือ "โปรโมชั่น" ไว้บนสุด ส่วนอื่นสุ่มเพื่อความหลากหลาย