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

วิธีจัดเรียงแบบกำหนดเอง เช่น 4,2,1,3 ด้วย ORDER BY FIELD ใน MySQL

ใช้ FIELD() กำหนดลำดับแสดงผลแบบ Custom

ฟังก์ชัน FIELD(str, val1, val2, ...) คืนตำแหน่งของ str ในรายการ (1-based) ใช้ใน ORDER BY เพื่อจัดลำดับตามลิสต์ที่กำหนด

ตัวอย่างสร้างตารางและข้อมูล

CREATE TABLE DemoTable (Number INT);
INSERT INTO DemoTable VALUES (1), (4), (2), (3);

ข้อมูลในตาราง

+--------+
| Number |
+--------+
| 1      |
| 4      |
| 2      |
| 3      |
+--------+

คำสั่งจัดเรียงตามลำดับ: 4, 2, 1, 3

SELECT * FROM DemoTable ORDER BY FIELD(Number, 4, 2, 1, 3);

ผลลัพธ์

+--------+
| Number |
+--------+
| 4      |
| 2      |
| 1      |
| 3      |
+--------+

คำอธิบาย:

  • FIELD(Number, 4, 2, 1, 3) คืนค่า: 4→1, 2→2, 1→3, 3→4, อื่นๆ→0
  • ORDER BY ... ASC (Default) เรียง 1,2,3,4 → ตรงลำดับใน FIELD()
  • ค่าทไม่อยู่ในลิสต์ (FIELD=0) จะอยู่หน้าสุด (ถ้า ASC) หรือท้ายสุด (ถ้า DESC)

ควบคุมตำแหน่งค่าทไม่อยู่ในลิสต์:

-- ค่าทไม่อยู่ในลิสต์อยู่ท้าย (เพิ่ม 0 ใน FIELD หรือ CASE)
ORDER BY FIELD(Number, 4, 2, 1, 3) DESC;  -- 0 จะอยู่ท้าย

-- หรือระบุชัดเจน
ORDER BY CASE WHEN Number IN (4,2,1,3) THEN 0 ELSE 1 END, FIELD(Number, 4, 2, 1, 3);

ประยุกต์ใช้: จัดอันดับสถานะ: ORDER BY FIELD(status, 'pending', 'processing', 'shipped', 'delivered', 'cancelled')