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

MySQL: ดึงข้อมูลจากกลางรายการที่เรียงแล้วด้วย LIMIT OFFSET

การดึงข้อมูลจากตำแหน่งกลางของรายการที่เรียงแล้วด้วย LIMIT offset, count

ใช้ ORDER BY เรียงข้อมูลก่อน แล้วใช้ LIMIT offset, row_count เพื่อข้ามแถวแรกๆ (OFFSET) และดึงจำนวนแถวที่ต้องการ วิธีนี้ใช้สำหรับ Pagination หรือดึงหน้าที่ไม่ใช่หน้าแรก

ตัวอย่างการใช้งาน

สร้างตารางและเพิ่มชื่อ 12 รายการ:

mysql> CREATE TABLE sortedListDemo (
    -> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> StudentName VARCHAR(100)
    -> );
Query OK, 0 rows affected (0.46 sec)

mysql> INSERT INTO sortedListDemo(StudentName) VALUES('John'),('Sam'),('Adam'),('James'),('Jace'),('Mike'),('Carol'),('Bob'),('Ramit'),('Chris'),('Robert'),('David');
Query OK, 12 rows affected (0.15 sec)

ข้อมูลทั้งหมด (เรียงตาม Id):

mysql> SELECT * FROM sortedListDemo;
+----+-------------+
| Id | StudentName |
+----+-------------+
| 1  | John        |
| 2  | Sam         |
| 3  | Adam        |
| 4  | James       |
| 5  | Jace        |
| 6  | Mike        |
| 7  | Carol       |
| 8  | Bob         |
| 9  | Ramit       |
| 10 | Chris       |
| 11 | Robert      |
| 12 | David       |
+----+-------------+
12 rows in set (0.00 sec)

เรียงตามชื่อ แล้วข้าม 4 แถวแรก (OFFSET 4) ดึง 6 แถว:

mysql> SELECT * FROM sortedListDemo
    -> ORDER BY StudentName
    -> LIMIT 4, 6;

ผลลัพธ์ (แถวที่ 5-10 หลังเรียงชื่อ):

+----+-------------+
| Id | StudentName |
+----+-------------+
| 12 | David       |
| 5  | Jace        |
| 4  | James       |
| 1  | John        |
| 6  | Mike        |
| 9  | Ramit       |
+----+-------------+
6 rows in set (0.00 sec)

คำอธิบาย LIMIT

  • LIMIT 4, 6 = LIMIT 6 OFFSET 4 (ข้าม 4 แถว, ดึง 6 แถว)
  • LIMIT 6 = LIMIT 6 OFFSET 0 (ดึง 6 แถวแรก)
  • Offset เริ่มที่ 0 (แถวแรก = offset 0)

ข้อควรระวังประสิทธิภาพ

OFFSET ใหญ่ (เช่น LIMIT 100000, 10) ทำให้ MySQL ต้องอ่านและทิ้ง 100,000 แถวก่อน → ช้า ใช้ Keyset Pagination (WHERE id > last_seen_id ORDER BY id LIMIT 10) แทนสำหรับข้อมูลมาก