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

จัดเรียงผลลัพธ์: Random บางส่วน แล้ว Order ตามเกณฑ์ใน MySQL

ใช้ ORDER BY CASE เพื่อจัดกลุ่มข้อมูล: กลุ่มแรกสุ่ม (RAND()) กลุ่มต่อไปเรียงตามเกณฑ์ (เช่น Number ASC)

ตัวอย่าง: Position='Highest' สุ่ม, Position='Lowest' เรียง Number น้อยไปมาก

1. สร้างตารางและเพิ่มข้อมูล

mysql> create table DemoTable1926 ( Position varchar(20), Number int ); Query OK, 0 rows affected (0.00 sec)

mysql> insert into DemoTable1926 values('Highest',50); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1926 values('Highest',30); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1926 values('Lowest',100); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1926 values('Lowest',120); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1926 values('Lowest',90); Query OK, 1 row affected (0.00 sec)

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

mysql> select * from DemoTable1926;
+----------+--------+
| Position | Number |
+----------+--------+
| Highest  |     50 |
| Highest  |     30 |
| Lowest   |    100 |
| Lowest   |    120 |
| Lowest   |     90 |
+----------+--------+
5 rows in set (0.00 sec)

2. เรียง: Lowest ก่อน (Number ASC), Highest ท้าย (Random)

mysql> select * from DemoTable1926 
    -> order by Position desc,
    -> case Position when 'Highest' then rand() else Number end asc;

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

+----------+--------+
| Position | Number |
+----------+--------+
| Lowest   |     90 |
| Lowest   |    100 |
| Lowest   |    120 |
| Highest  |     50 |
| Highest  |     30 |
+----------+--------+
5 rows in set (0.00 sec)

อธิบาย ORDER BY

  1. Position DESC - 'Lowest' (L) > 'Highest' (H) ใน ASCII → Lowest อยู่บน
  2. CASE Position WHEN 'Highest' THEN RAND() ELSE Number END:
    • Lowest → ใช้ Number เรียง 90, 100, 120
    • Highest → ใช้ RAND() สุ่มลำดับทุกครั้งที่ Query

รูปแบบ CASE ใน ORDER BY

PatternSyntaxใช้เมื่อ
Simple CASECASE col WHEN val1 THEN sort1 WHEN val2 THEN sort2 ENDเปรียบเทียบค่าเดียว
Searched CASECASE WHEN condition1 THEN sort1 WHEN condition2 THEN sort2 ENDเงื่อนไขซับซ้อน

ตัวอย่างเพิ่มเติม: ใส่ค่าเฉพาะด้านบน แล้วค่อยเรียงอื่นๆ

SELECT * FROM products
ORDER BY 
    CASE WHEN category = 'Featured' THEN 0 ELSE 1 END,  -- Featured บนสุด
    CASE WHEN category = 'Featured' THEN RAND() ELSE price END;  -- Featured สุ่ม, อื่นๆ เรียงราคา

สรุป: ใช้ ORDER BY CASE WHEN condition THEN RAND() ELSE sort_column END เพื่อผสม Random และ Deterministic Sorting ใน Query เดียว