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

MySQL Query: เรียงลำดับข้อมูลแต่ล็อคชื่อเฉพาะไว้หน้าสุด ส่วนที่เหลือสุ่ม และจำกัดจำนวนแถว

วัตถุประสงค์

ต้องการให้ชื่อเฉพาะ (เช่น '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) ส่วนที่เหลือสุ่ม