การดึงข้อมูลจากตำแหน่งกลางของรายการที่เรียงแล้วด้วย 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) แทนสำหรับข้อมูลมาก